diff --git a/.gitignore b/.gitignore index 0bf9dc9f..3a9ad0b8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,11 @@ node_modules .rpt2_cache .env* + tmp proto weights_uncompressed weights_unused -docs \ No newline at end of file +docs +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 6ea96a20..70b26bae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,19 +1,25 @@ sudo: required language: node_js node_js: - - "node" + #- "node" + - "12" + - "11" - "10" - "8" - - "6" + # node 6 is not compatible with tfjs-node + # - "6" +services: + - xvfb env: - - BACKEND_CPU=true EXCLUDE_UNCOMPRESSED=true + global: + - BACKEND_CPU=true EXCLUDE_UNCOMPRESSED=true + matrix: + - ENV=browser + - ENV=node addons: chrome: stable install: npm install -before_install: - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - - sleep 3 # give xvfb some time to start script: - - npm run test-travis + - if [ $ENV == 'browser' ]; then npm run test-browser; fi + - if [ $ENV == 'node' ]; then npm run test-node; fi - npm run build \ No newline at end of file diff --git a/README.md b/README.md index 0e67eda8..df98850e 100644 --- a/README.md +++ b/README.md @@ -3,161 +3,198 @@ [![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)** -* **[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)** - - - -# 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-preview](https://user-images.githubusercontent.com/31125521/47384002-41e36f80-d706-11e8-8cd9-b3102c1bee67.png) - -## Face Similarity - -![preview_face-similarity](https://user-images.githubusercontent.com/31125521/40316573-0a1190c0-5d1f-11e8-8797-f6deaa344523.gif) +![face-recognition](https://user-images.githubusercontent.com/31125521/57297377-bfcdfd80-70cf-11e9-8afa-2044cb167bff.gif) ## Face Landmark Detection -![face_landmarks_boxes_2](https://user-images.githubusercontent.com/31125521/46063404-00928b00-c16d-11e8-8f29-e9c50afd2bc8.jpg) +![face_landmark_detection](https://user-images.githubusercontent.com/31125521/57297731-b1ccac80-70d0-11e9-9bd7-59d77f180322.jpg) -![preview_face_landmarks](https://user-images.githubusercontent.com/31125521/41507950-e121b05e-723c-11e8-89f2-d8f9348a8e86.png) +## Face Expression Recognition -## Realtime Face Tracking +![preview_face-expression-recognition](https://user-images.githubusercontent.com/31125521/50575270-f501d080-0dfb-11e9-9676-8f419efdade4.png) -![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: ``` bash git clone https://github.com/justadudewhohacks/face-api.js.git -cd face-api.js/examples +``` + +## Running the Browser Examples + +``` bash +cd face-api.js/examples/examples-browser npm i npm start ``` Browse to http://localhost:3000/. - +## Running the Nodejs Examples -# Available Models +``` bash +cd face-api.js/examples/examples-nodejs +npm i +``` - +Now run one of the examples using ts-node: -## Face Detection Models +``` bash +ts-node faceDetection.ts +``` -### SSD Mobilenet V1 +Or simply compile and run them with node: -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**). +``` bash +tsc faceDetection.ts +node faceDetection.js +``` -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 +# face-api.js for the Browser -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**). +Simply include the latest script from [dist/face-api.js](https://github.com/justadudewhohacks/face-api.js/tree/master/dist). -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. +Or install it via npm: -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). +``` bash +npm i face-api.js +``` -### 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.** +# face-api.js for Nodejs -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. +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. -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. +Alternatively you can simply construct your own tensors from image data and pass tensors as inputs to the API. - +Furthermore you want to install @tensorflow/tfjs-node (not required, but highly recommended), which speeds things up drastically by compiling and binding to the native Tensorflow C++ library: -## 68 Point Face Landmark Detection Models +``` bash +npm i face-api.js canvas @tensorflow/tfjs-node +``` -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. +Now we simply monkey patch the environment to use the polyfills: - +``` javascript +// import nodejs bindings to native tensorflow, +// not required, but will speed up things drastically (python required) +import '@tensorflow/tfjs-node'; -## Face Recognition Model +// implements nodejs wrappers for HTMLCanvasElement, HTMLImageElement, ImageData +import * as canvas from 'canvas'; -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. +import * as faceapi from 'face-api.js'; -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. +// patch nodejs environment, we need to provide an implementation of +// HTMLCanvasElement and HTMLImageElement +const { Canvas, Image, ImageData } = canvas +faceapi.env.monkeyPatch({ Canvas, Image, ImageData }) +``` -The size of the quantized model is roughly 6.2 MB (**face_recognition_model**). + -# Usage +# Getting Started - + ## 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. +All global neural network instances are exported via faceapi.nets: + +``` javascript +console.log(faceapi.nets) +// ageGenderNet +// faceExpressionNet +// faceLandmark68Net +// faceLandmark68TinyNet +// faceRecognitionNet +// ssdMobilenetv1 +// tinyFaceDetector +// tinyYolov2 +``` + +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.loadSsdMobilenetv1Model('/models') +await faceapi.nets.ssdMobilenetv1.loadFromUri('/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.nets.faceLandmark68Net.loadFromUri('/models') +// await faceapi.nets.faceRecognitionNet.loadFromUri('/models') +// ... ``` -Alternatively, you can also create instance of the neural nets: +In a nodejs environment you can furthermore load the models directly from disk: + +``` javascript +await faceapi.nets.ssdMobilenetv1.loadFromDisk('./models') +``` + +You can also load the model from a tf.NamedTensorMap: + +``` javascript +await faceapi.nets.ssdMobilenetv1.loadFromWeightMap(weightMap) +``` + +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') ``` -Using instances, you can also load the weights as a Float32Array (in case you want to use the uncompressed models): +You can also load the weights as a Float32Array (in case you want to use the uncompressed models): ``` javascript // using fetch @@ -169,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. @@ -205,23 +244,22 @@ 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.inyFaceDetectorOptions()) -const detections3 = await faceapi.detectAllFaces(input, new faceapi.MtcnnOptions()) +const detections2 = await faceapi.detectAllFaces(input, new faceapi.TinyFaceDetectorOptions()) ``` -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<[FaceDetectionWithLandmarks](#interface-face-detection-with-landmarks)>**: +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 **[FaceDetectionWithLandmarks](#interface-face-detection-with-landmarks) | 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() @@ -238,49 +276,133 @@ 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<[FullFaceDescription](#interface-full-face-description)>**: +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 + 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() +``` + +### Recognizing Face Expressions + +**Face expression recognition can be performed for detected faces as follows:** + +Detect all faces in an image + recognize face expressions of each face. Returns **Array<[WithFaceExpressions>>](#getting-started-utility-classes)>**: ``` javascript -const fullFaceDescriptions = await faceapi.detectAllFaces(input).withFaceLandmarks().withFaceDescriptors() +const detectionsWithExpressions = await faceapi.detectAllFaces(input).withFaceLandmarks().withFaceExpressions() ``` -Detect the face with the highest confidence score in an image + computes 68 Point Face Landmarks and face descriptor for that face. Returns **[FullFaceDescription](#interface-full-face-description) | undefined**: +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 fullFaceDescription = await faceapi.detectSingleFace(input).withFaceLandmarks().withFaceDescriptor() +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 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:** + +``` javascript +// all faces +await faceapi.detectAllFaces(input) +await faceapi.detectAllFaces(input).withFaceExpressions() +await faceapi.detectAllFaces(input).withFaceLandmarks() +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).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 fullFaceDescriptions = await faceapi +const results = await faceapi .detectAllFaces(referenceImage) .withFaceLandmarks() .withFaceDescriptors() -if (!fullFaceDescriptions.length) { +if (!results.length) { return } // create FaceMatcher with automatically assigned labels // from the detection results for the reference image -const faceMatcher = new faceapi.FaceMatcher(fullFaceDescriptions) +const faceMatcher = new faceapi.FaceMatcher(results) ``` Now we can recognize a persons face shown in **queryImage1**: ``` javascript -const singleFullFaceDescription = await faceapi +const singleResult = await faceapi .detectSingleFace(queryImage1) .withFaceLandmarks() .withFaceDescriptor() -if (singleFullFaceDescription) { - const bestMatch = faceMatcher.findBestMatch(singleFullFaceDescription.descriptor) +if (singleResult) { + const bestMatch = faceMatcher.findBestMatch(singleResult.descriptor) console.log(bestMatch.toString()) } ``` @@ -288,12 +410,12 @@ if (singleFullFaceDescription) { Or we can recognize all faces shown in **queryImage2**: ``` javascript -const fullFaceDescriptions = await faceapi +const results = await faceapi .detectAllFaces(queryImage2) .withFaceLandmarks() .withFaceDescriptors() -fullFaceDescriptions.forEach(fd => { +results.forEach(fd => { const bestMatch = faceMatcher.findBestMatch(fd.descriptor) console.log(bestMatch.toString()) }) @@ -304,11 +426,11 @@ You can also create labeled reference descriptors as follows: ``` javascript const labeledDescriptors = [ new faceapi.LabeledFaceDescriptors( - 'obama' + 'obama', [descriptorObama1, descriptorObama2] ), new faceapi.LabeledFaceDescriptors( - 'trump' + 'trump', [descriptorTrump] ) ] @@ -316,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 = detections.map(det => det.forSize(input.width, 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 = detectionsWithLandmarks.map(det => det.forSize(input.width, 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')) ``` -Finally you can also draw boxes with custom text: +DrawBox drawing options: ``` 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')) +export interface IDrawBoxOptions { + boxColor?: string + lineWidth?: number + drawLabelOptions?: IDrawTextFieldOptions + label?: string +} +``` + +Finally you can draw custom text fields ([DrawTextField](https://github.com/justadudewhohacks/tfjs-image-recognition-base/blob/master/src/draw/DrawTextField.ts)): + +``` javascript +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 @@ -404,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 @@ -453,8 +605,6 @@ export interface IBox { } ``` - - ### IFaceDetection ``` javascript @@ -464,8 +614,6 @@ export interface IFaceDetection { } ``` - - ### IFaceLandmarks ``` javascript @@ -475,28 +623,63 @@ export interface IFaceLandmarks { } ``` - - -### IFaceDetectionWithLandmarks +### WithFaceDetection ``` javascript -export interface IFaceDetectionWithLandmarks { +export type WithFaceDetection = TSource & { detection: FaceDetection - landmarks: FaceLandmarks } ``` - +### WithFaceLandmarks -### IFullFaceDescription +``` javascript +export type WithFaceLandmarks = TSource & { + unshiftedLandmarks: FaceLandmarks + landmarks: FaceLandmarks + alignedRect: FaceDetection +} +``` + +### WithFaceDescriptor ``` javascript -export interface IFullFaceDescription extends IFaceDetectionWithLandmarks { +export type WithFaceDescriptor = TSource & { descriptor: Float32Array } ``` - +### WithFaceExpressions + +``` javascript +export type WithFaceExpressions = TSource & { + expressions: FaceExpressions +} +``` + +### WithAge + +``` javascript +export type WithAge = TSource & { + age: number +} +``` + +### WithGender + +``` javascript +export type WithGender = TSource & { + gender: Gender + genderProbability: number +} + +export enum Gender { + FEMALE = 'female', + MALE = 'male' +} +``` + + ## Other Useful Utility @@ -507,18 +690,11 @@ 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) ``` -All global neural network instances are exported via faceapi.nets: - -``` javascript -console.log(faceapi.nets) -``` - ### Extracting a Canvas for an Image Region ``` javascript @@ -602,4 +778,78 @@ async function uploadImage() { ``` javascript const canvas1 = faceapi.createCanvasFromMedia(document.getElementById('myImg')) const canvas2 = faceapi.createCanvasFromMedia(document.getElementById('myVideo')) -``` \ No newline at end of file +``` + + + +# 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 b542db89..00000000 --- a/build/commonjs/classes/FaceDetection.d.ts +++ /dev/null @@ -1,8 +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); -} diff --git a/build/commonjs/classes/FaceDetection.js b/build/commonjs/classes/FaceDetection.js deleted file mode 100644 index ac80fb00..00000000 --- a/build/commonjs/classes/FaceDetection.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 FaceDetection = /** @class */ (function (_super) { - tslib_1.__extends(FaceDetection, _super); - function FaceDetection(score, relativeBox, imageDims) { - return _super.call(this, score, score, '', relativeBox, imageDims) || this; - } - 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 f1fd6120..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;IACH,oBAAC;AAAD,CAAC,AARD,CAAmC,6CAAe,GAQjD;AARY,sCAAa"} \ No newline at end of file diff --git a/build/commonjs/classes/FaceDetectionWithLandmarks.d.ts b/build/commonjs/classes/FaceDetectionWithLandmarks.d.ts deleted file mode 100644 index ed2ac7d5..00000000 --- a/build/commonjs/classes/FaceDetectionWithLandmarks.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { FaceDetection } from './FaceDetection'; -import { FaceLandmarks } from './FaceLandmarks'; -import { FaceLandmarks68 } from './FaceLandmarks68'; -export interface IFaceDetectionWithLandmarks { - detection: FaceDetection; - landmarks: TFaceLandmarks; -} -export declare class FaceDetectionWithLandmarks implements IFaceDetectionWithLandmarks { - private _detection; - private _unshiftedLandmarks; - constructor(detection: FaceDetection, unshiftedLandmarks: TFaceLandmarks); - readonly detection: FaceDetection; - readonly unshiftedLandmarks: TFaceLandmarks; - readonly alignedRect: FaceDetection; - readonly landmarks: TFaceLandmarks; - readonly faceDetection: FaceDetection; - readonly faceLandmarks: TFaceLandmarks; - forSize(width: number, height: number): FaceDetectionWithLandmarks; -} diff --git a/build/commonjs/classes/FaceDetectionWithLandmarks.js b/build/commonjs/classes/FaceDetectionWithLandmarks.js deleted file mode 100644 index 55b3f0a9..00000000 --- a/build/commonjs/classes/FaceDetectionWithLandmarks.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var FaceDetection_1 = require("./FaceDetection"); -var FaceDetectionWithLandmarks = /** @class */ (function () { - function FaceDetectionWithLandmarks(detection, unshiftedLandmarks) { - this._detection = detection; - this._unshiftedLandmarks = unshiftedLandmarks; - } - Object.defineProperty(FaceDetectionWithLandmarks.prototype, "detection", { - get: function () { return this._detection; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceDetectionWithLandmarks.prototype, "unshiftedLandmarks", { - get: function () { return this._unshiftedLandmarks; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceDetectionWithLandmarks.prototype, "alignedRect", { - get: function () { - var rect = this.landmarks.align(); - var imageDims = this.detection.imageDims; - return new FaceDetection_1.FaceDetection(this._detection.score, rect.rescale(imageDims.reverse()), imageDims); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceDetectionWithLandmarks.prototype, "landmarks", { - get: function () { - var _a = this.detection.box, x = _a.x, y = _a.y; - return this._unshiftedLandmarks.shiftBy(x, y); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceDetectionWithLandmarks.prototype, "faceDetection", { - // aliases for backward compatibily - get: function () { return this.detection; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceDetectionWithLandmarks.prototype, "faceLandmarks", { - get: function () { return this.landmarks; }, - enumerable: true, - configurable: true - }); - FaceDetectionWithLandmarks.prototype.forSize = function (width, height) { - var resizedDetection = this._detection.forSize(width, height); - var resizedLandmarks = this._unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height); - return new FaceDetectionWithLandmarks(resizedDetection, resizedLandmarks); - }; - return FaceDetectionWithLandmarks; -}()); -exports.FaceDetectionWithLandmarks = FaceDetectionWithLandmarks; -//# sourceMappingURL=FaceDetectionWithLandmarks.js.map \ No newline at end of file diff --git a/build/commonjs/classes/FaceDetectionWithLandmarks.js.map b/build/commonjs/classes/FaceDetectionWithLandmarks.js.map deleted file mode 100644 index ae66ce23..00000000 --- a/build/commonjs/classes/FaceDetectionWithLandmarks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceDetectionWithLandmarks.js","sourceRoot":"","sources":["../../../src/classes/FaceDetectionWithLandmarks.ts"],"names":[],"mappings":";;AAAA,iDAAgD;AAShD;IAME,oCACE,SAAwB,EACxB,kBAAkC;QAElC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;QAC3B,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAA;IAC/C,CAAC;IAED,sBAAW,iDAAS;aAApB,cAAwC,OAAO,IAAI,CAAC,UAAU,CAAA,CAAC,CAAC;;;OAAA;IAChE,sBAAW,0DAAkB;aAA7B,cAAkD,OAAO,IAAI,CAAC,mBAAmB,CAAA,CAAC,CAAC;;;OAAA;IAEnF,sBAAW,mDAAW;aAAtB;YACE,IAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;YAC3B,IAAA,oCAAS,CAAmB;YACpC,OAAO,IAAI,6BAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QAC/F,CAAC;;;OAAA;IAED,sBAAW,iDAAS;aAApB;YACQ,IAAA,uBAA6B,EAA3B,QAAC,EAAE,QAAC,CAAuB;YACnC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/C,CAAC;;;OAAA;IAGD,sBAAI,qDAAa;QADjB,mCAAmC;aACnC,cAAqC,OAAO,IAAI,CAAC,SAAS,CAAA,CAAC,CAAC;;;OAAA;IAC5D,sBAAI,qDAAa;aAAjB,cAAsC,OAAO,IAAI,CAAC,SAAS,CAAA,CAAC,CAAC;;;OAAA;IAEtD,4CAAO,GAAd,UAAe,KAAa,EAAE,MAAc;QAC1C,IAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC/D,IAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAiB,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAClI,OAAO,IAAI,0BAA0B,CAAiB,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;IAC3F,CAAC;IACH,iCAAC;AAAD,CAAC,AArCD,IAqCC;AArCY,gEAA0B"} \ 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":"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"} \ 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/FullFaceDescription.d.ts b/build/commonjs/classes/FullFaceDescription.d.ts deleted file mode 100644 index 88ec647d..00000000 --- a/build/commonjs/classes/FullFaceDescription.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { FaceDetection } from './FaceDetection'; -import { FaceDetectionWithLandmarks, IFaceDetectionWithLandmarks } from './FaceDetectionWithLandmarks'; -import { FaceLandmarks } from './FaceLandmarks'; -import { FaceLandmarks68 } from './FaceLandmarks68'; -export interface IFullFaceDescription extends IFaceDetectionWithLandmarks { - detection: FaceDetection; - landmarks: TFaceLandmarks; - descriptor: Float32Array; -} -export declare class FullFaceDescription extends FaceDetectionWithLandmarks implements IFullFaceDescription { - private _descriptor; - constructor(detection: FaceDetection, unshiftedLandmarks: TFaceLandmarks, descriptor: Float32Array); - readonly descriptor: Float32Array; - forSize(width: number, height: number): FullFaceDescription; -} diff --git a/build/commonjs/classes/FullFaceDescription.js b/build/commonjs/classes/FullFaceDescription.js deleted file mode 100644 index fba5a745..00000000 --- a/build/commonjs/classes/FullFaceDescription.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var FaceDetectionWithLandmarks_1 = require("./FaceDetectionWithLandmarks"); -var FullFaceDescription = /** @class */ (function (_super) { - tslib_1.__extends(FullFaceDescription, _super); - function FullFaceDescription(detection, unshiftedLandmarks, descriptor) { - var _this = _super.call(this, detection, unshiftedLandmarks) || this; - _this._descriptor = descriptor; - return _this; - } - Object.defineProperty(FullFaceDescription.prototype, "descriptor", { - get: function () { - return this._descriptor; - }, - enumerable: true, - configurable: true - }); - FullFaceDescription.prototype.forSize = function (width, height) { - var _a = _super.prototype.forSize.call(this, width, height), detection = _a.detection, landmarks = _a.landmarks; - return new FullFaceDescription(detection, landmarks, this.descriptor); - }; - return FullFaceDescription; -}(FaceDetectionWithLandmarks_1.FaceDetectionWithLandmarks)); -exports.FullFaceDescription = FullFaceDescription; -//# sourceMappingURL=FullFaceDescription.js.map \ No newline at end of file diff --git a/build/commonjs/classes/FullFaceDescription.js.map b/build/commonjs/classes/FullFaceDescription.js.map deleted file mode 100644 index 6b612ab4..00000000 --- a/build/commonjs/classes/FullFaceDescription.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FullFaceDescription.js","sourceRoot":"","sources":["../../../src/classes/FullFaceDescription.ts"],"names":[],"mappings":";;;AACA,2EAAuG;AAYvG;IACU,+CAA0C;IAKlD,6BACE,SAAwB,EACxB,kBAAkC,EAClC,UAAwB;QAH1B,YAKE,kBAAM,SAAS,EAAE,kBAAkB,CAAC,SAErC;QADC,KAAI,CAAC,WAAW,GAAG,UAAU,CAAA;;IAC/B,CAAC;IAED,sBAAW,2CAAU;aAArB;YACE,OAAO,IAAI,CAAC,WAAW,CAAA;QACzB,CAAC;;;OAAA;IAEM,qCAAO,GAAd,UAAe,KAAa,EAAE,MAAc;QACpC,IAAA,uDAAuD,EAArD,wBAAS,EAAE,wBAAS,CAAiC;QAC7D,OAAO,IAAI,mBAAmB,CAAiB,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IACvF,CAAC;IACH,0BAAC;AAAD,CAAC,AAvBD,CACU,uDAA0B,GAsBnC;AAvBY,kDAAmB"} \ 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 e19eaaa8..00000000 --- a/build/commonjs/classes/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from './FaceDetection'; -export * from './FaceDetectionWithLandmarks'; -export * from './FaceLandmarks'; -export * from './FaceLandmarks5'; -export * from './FaceLandmarks68'; -export * from './FaceMatch'; -export * from './FullFaceDescription'; -export * from './LabeledFaceDescriptors'; diff --git a/build/commonjs/classes/index.js b/build/commonjs/classes/index.js deleted file mode 100644 index a8aa55b2..00000000 --- a/build/commonjs/classes/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("./FaceDetection"), exports); -tslib_1.__exportStar(require("./FaceDetectionWithLandmarks"), 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("./FullFaceDescription"), 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 5b389f30..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,uEAA6C;AAC7C,0DAAgC;AAChC,2DAAiC;AACjC,4DAAkC;AAClC,sDAA4B;AAC5B,gEAAsC;AACtC,mEAAyC"} \ 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 53143e06..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,qBACE,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/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 88137b34..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 HTMLCanvasElement)) { - 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 2c377d58..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,2EAAuG;AAGvG,8DAA6D;AAC7D,6CAA4C;AAG5C,uBACE,SAAqC,EACrC,aAA8C,EAC9C,OAA8B;IAE9B,IAAM,MAAM,GAAG,0CAAY,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,CAAC,CAAC,MAAM,YAAY,iBAAiB,CAAC,EAAE;QAC1C,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 c701c287..00000000 --- a/build/commonjs/dom/extractFaceTensors.js +++ /dev/null @@ -1,39 +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.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 95c669fc..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,2EAA+D;AAE/D,0DAAyD;AAEzD;;;;;;;;;GASG;AACH,4BACE,WAAsC,EACtC,UAAuC;;;YAGvC,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,mBAAW,CAA4D;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;AAzBD,gDAyBC"} \ 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 32b5ac02..00000000 --- a/build/commonjs/dom/extractFaces.js +++ /dev/null @@ -1,56 +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, netInput, tensorOrCanvas, _a, ctx, boxes; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - canvas = input; - if (!!(input instanceof HTMLCanvasElement)) 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 HTMLCanvasElement)) 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 0b1efce9..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,2EAOqC;AAErC,0DAAyD;AAEzD;;;;;;GAMG;AACH,sBACE,KAAgB,EAChB,UAAuC;;;;;;oBAGnC,MAAM,GAAG,KAA0B,CAAA;yBAEnC,CAAC,CAAC,KAAK,YAAY,iBAAiB,CAAC,EAArC,wBAAqC;oBACtB,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,iBAAiB,CAAA,EAA3C,wBAA2C;oBAChD,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;AAlCD,oCAkCC"} \ 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 2fdbb244..00000000 --- a/build/commonjs/dom/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './drawContour'; -export * from './drawLandmarks'; -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 0a57e0e2..00000000 --- a/build/commonjs/dom/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("./drawContour"), exports); -tslib_1.__exportStar(require("./drawLandmarks"), 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 f2b7980f..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,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 cd664596..00000000 --- a/build/commonjs/dom/types.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare type DrawLandmarksOptions = { - lineWidth?: number; - color?: string; - drawLines?: boolean; -}; 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 e05eee10..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,2BAAkC,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/faceLandmarkNet/FaceLandmark68Net.d.ts b/build/commonjs/faceLandmarkNet/FaceLandmark68Net.d.ts deleted file mode 100644 index 93d5106a..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68Net.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput } from 'tfjs-image-recognition-base'; -import { FaceLandmark68NetBase } from './FaceLandmark68NetBase'; -import { NetParams } from './types'; -export declare class FaceLandmark68Net extends FaceLandmark68NetBase { - constructor(); - runNet(input: NetInput): tf.Tensor2D; - protected loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }>; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }; -} diff --git a/build/commonjs/faceLandmarkNet/FaceLandmark68Net.js b/build/commonjs/faceLandmarkNet/FaceLandmark68Net.js deleted file mode 100644 index 81325daf..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68Net.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 depthwiseSeparableConv_1 = require("./depthwiseSeparableConv"); -var extractParams_1 = require("./extractParams"); -var FaceLandmark68NetBase_1 = require("./FaceLandmark68NetBase"); -var fullyConnectedLayer_1 = require("./fullyConnectedLayer"); -var loadQuantizedParams_1 = require("./loadQuantizedParams"); -function denseBlock(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]); - 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)))); - }); -} -var FaceLandmark68Net = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmark68Net, _super); - function FaceLandmark68Net() { - return _super.call(this, 'FaceLandmark68Net') || this; - } - FaceLandmark68Net.prototype.runNet = function (input) { - var params = this.params; - if (!params) { - throw new Error('FaceLandmark68Net - 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(normalized, params.dense0, true); - out = denseBlock(out, params.dense1); - out = denseBlock(out, params.dense2); - out = denseBlock(out, params.dense3); - out = tf.avgPool(out, [7, 7], [2, 2], 'valid'); - return fullyConnectedLayer_1.fullyConnectedLayer(out.as2D(out.shape[0], -1), params.fc); - }); - }; - FaceLandmark68Net.prototype.loadQuantizedParams = function (uri) { - return loadQuantizedParams_1.loadQuantizedParams(uri); - }; - FaceLandmark68Net.prototype.extractParams = function (weights) { - return extractParams_1.extractParams(weights); - }; - 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 c04f2c6a..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":"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"} \ 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 8ec0dad9..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { IDimensions, NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -export declare class FaceLandmark68NetBase extends NeuralNetwork { - private __name; - constructor(_name: string); - runNet(_: NetInput): tf.Tensor2D; - postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D; - forwardInput(input: NetInput): tf.Tensor2D; - forward(input: TNetInput): Promise; - detectLandmarks(input: TNetInput): Promise; -} diff --git a/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.js b/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.js deleted file mode 100644 index 9183847c..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68NetBase.js +++ /dev/null @@ -1,115 +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 FaceLandmark68NetBase = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmark68NetBase, _super); - function FaceLandmark68NetBase(_name) { - var _this = _super.call(this, _name) || this; - _this.__name = _name; - return _this; - } - FaceLandmark68NetBase.prototype.runNet = function (_) { - throw new Error(this.__name + " - runNet not implemented"); - }; - 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 _this = this; - var netInput, landmarkTensors, landmarksForBatch; - 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]]; - } - }); - }); - }; - return FaceLandmark68NetBase; -}(tfjs_image_recognition_base_1.NeuralNetwork)); -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 237d887e..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 774b1109..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput } from 'tfjs-image-recognition-base'; -import { FaceLandmark68NetBase } from './FaceLandmark68NetBase'; -import { TinyNetParams } from './types'; -export declare class FaceLandmark68TinyNet extends FaceLandmark68NetBase { - constructor(); - runNet(input: NetInput): tf.Tensor2D; - protected loadQuantizedParams(uri: string | undefined): Promise<{ - params: TinyNetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }>; - protected extractParams(weights: Float32Array): { - params: TinyNetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }; -} diff --git a/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.js b/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.js deleted file mode 100644 index ef919986..00000000 --- a/build/commonjs/faceLandmarkNet/FaceLandmark68TinyNet.js +++ /dev/null @@ -1,53 +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 depthwiseSeparableConv_1 = require("./depthwiseSeparableConv"); -var extractParamsTiny_1 = require("./extractParamsTiny"); -var FaceLandmark68NetBase_1 = require("./FaceLandmark68NetBase"); -var fullyConnectedLayer_1 = require("./fullyConnectedLayer"); -var loadQuantizedParamsTiny_1 = require("./loadQuantizedParamsTiny"); -function denseBlock(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))); - }); -} -var FaceLandmark68TinyNet = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmark68TinyNet, _super); - function FaceLandmark68TinyNet() { - return _super.call(this, 'FaceLandmark68TinyNet') || this; - } - FaceLandmark68TinyNet.prototype.runNet = function (input) { - var params = this.params; - if (!params) { - throw new Error('FaceLandmark68TinyNet - 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(normalized, params.dense0, true); - out = denseBlock(out, params.dense1); - out = denseBlock(out, params.dense2); - out = tf.avgPool(out, [14, 14], [2, 2], 'valid'); - return fullyConnectedLayer_1.fullyConnectedLayer(out.as2D(out.shape[0], -1), params.fc); - }); - }; - FaceLandmark68TinyNet.prototype.loadQuantizedParams = function (uri) { - return loadQuantizedParamsTiny_1.loadQuantizedParamsTiny(uri); - }; - FaceLandmark68TinyNet.prototype.extractParams = function (weights) { - return extractParamsTiny_1.extractParamsTiny(weights); - }; - 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 a5de506a..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,0CAA4C;AAC5C,2EAAkE;AAGlE,mEAAkE;AAClE,yDAAwD;AACxD,iEAAgE;AAChE,6DAA4D;AAC5D,qEAAoE;AAGpE,oBACE,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,KAAoB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,EAC5E,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAC5B;YACD,CAAC,CAAC,+CAAsB,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAA4B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACtE,CAAA;QAChB,IAAM,IAAI,GAAG,+CAAsB,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,+CAAsB,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;IAA2C,iDAAoC;IAE7E;eACE,kBAAM,uBAAuB,CAAC;IAChC,CAAC;IAEM,sCAAM,GAAb,UAAc,KAAe;QAEnB,IAAA,oBAAM,CAAS;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;SACvE;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,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YACrD,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACpC,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACpC,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,yCAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;QACnE,CAAC,CAAC,CAAA;IACJ,CAAC;IAES,mDAAmB,GAA7B,UAA8B,GAAuB;QACnD,OAAO,iDAAuB,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC;IAES,6CAAa,GAAvB,UAAwB,OAAqB;QAC3C,OAAO,qCAAiB,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC;IACH,4BAAC;AAAD,CAAC,AAnCD,CAA2C,6CAAqB,GAmC/D;AAnCY,sDAAqB"} \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/depthwiseSeparableConv.d.ts b/build/commonjs/faceLandmarkNet/depthwiseSeparableConv.d.ts deleted file mode 100644 index 3e11ba95..00000000 --- a/build/commonjs/faceLandmarkNet/depthwiseSeparableConv.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { SeparableConvParams } from 'tfjs-tiny-yolov2'; -export declare function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams, stride: [number, number]): tf.Tensor4D; diff --git a/build/commonjs/faceLandmarkNet/depthwiseSeparableConv.js b/build/commonjs/faceLandmarkNet/depthwiseSeparableConv.js deleted file mode 100644 index 969f2522..00000000 --- a/build/commonjs/faceLandmarkNet/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/faceLandmarkNet/depthwiseSeparableConv.js.map b/build/commonjs/faceLandmarkNet/depthwiseSeparableConv.js.map deleted file mode 100644 index 07475543..00000000 --- a/build/commonjs/faceLandmarkNet/depthwiseSeparableConv.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"depthwiseSeparableConv.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/depthwiseSeparableConv.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAG5C,gCACE,CAAc,EACd,MAA2B,EAC3B,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/faceLandmarkNet/extractParams.d.ts b/build/commonjs/faceLandmarkNet/extractParams.d.ts deleted file mode 100644 index 40295777..00000000 --- a/build/commonjs/faceLandmarkNet/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: ParamMapping[]; -}; diff --git a/build/commonjs/faceLandmarkNet/extractParams.js b/build/commonjs/faceLandmarkNet/extractParams.js deleted file mode 100644 index 1b2bf57a..00000000 --- a/build/commonjs/faceLandmarkNet/extractParams.js +++ /dev/null @@ -1,23 +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 extractParams(weights) { - var paramMappings = []; - var _a = tfjs_image_recognition_base_1.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var _b = extractorsFactory_1.extractorsFactory(extractWeights, paramMappings), extractDenseBlock4Params = _b.extractDenseBlock4Params, extractFCParams = _b.extractFCParams; - 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'); - var fc = extractFCParams(256, 136, 'fc'); - 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, fc: fc } - }; -} -exports.extractParams = extractParams; -//# sourceMappingURL=extractParams.js.map \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/extractParams.js.map b/build/commonjs/faceLandmarkNet/extractParams.js.map deleted file mode 100644 index 2df6c83c..00000000 --- a/build/commonjs/faceLandmarkNet/extractParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/extractParams.ts"],"names":[],"mappings":";;AAAA,2EAAkF;AAElF,yDAAwD;AAGxD,uBAA8B,OAAqB;IAEjD,IAAM,aAAa,GAAmB,EAAE,CAAA;IAElC,IAAA,iEAG4B,EAFhC,kCAAc,EACd,4CAAmB,CACa;IAE5B,IAAA,yEAG8C,EAFlD,sDAAwB,EACxB,oCAAe,CACmC;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;IAC3D,IAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAE1C,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,EAAE,IAAA,EAAE;KAC/C,CAAA;AACH,CAAC;AA5BD,sCA4BC"} \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/extractParamsTiny.d.ts b/build/commonjs/faceLandmarkNet/extractParamsTiny.d.ts deleted file mode 100644 index ef9c65b1..00000000 --- a/build/commonjs/faceLandmarkNet/extractParamsTiny.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { TinyNetParams } from './types'; -export declare function extractParamsTiny(weights: Float32Array): { - params: TinyNetParams; - paramMappings: ParamMapping[]; -}; diff --git a/build/commonjs/faceLandmarkNet/extractParamsTiny.js b/build/commonjs/faceLandmarkNet/extractParamsTiny.js deleted file mode 100644 index de267340..00000000 --- a/build/commonjs/faceLandmarkNet/extractParamsTiny.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"); -var extractorsFactory_1 = require("./extractorsFactory"); -function extractParamsTiny(weights) { - var paramMappings = []; - var _a = tfjs_image_recognition_base_1.extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var _b = extractorsFactory_1.extractorsFactory(extractWeights, paramMappings), extractDenseBlock3Params = _b.extractDenseBlock3Params, extractFCParams = _b.extractFCParams; - var dense0 = extractDenseBlock3Params(3, 32, 'dense0', true); - var dense1 = extractDenseBlock3Params(32, 64, 'dense1'); - var dense2 = extractDenseBlock3Params(64, 128, 'dense2'); - var fc = extractFCParams(128, 136, 'fc'); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - paramMappings: paramMappings, - params: { dense0: dense0, dense1: dense1, dense2: dense2, fc: fc } - }; -} -exports.extractParamsTiny = extractParamsTiny; -//# sourceMappingURL=extractParamsTiny.js.map \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/extractParamsTiny.js.map b/build/commonjs/faceLandmarkNet/extractParamsTiny.js.map deleted file mode 100644 index c7062d20..00000000 --- a/build/commonjs/faceLandmarkNet/extractParamsTiny.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsTiny.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/extractParamsTiny.ts"],"names":[],"mappings":";;AAAA,2EAAkF;AAElF,yDAAwD;AAGxD,2BAAkC,OAAqB;IAErD,IAAM,aAAa,GAAmB,EAAE,CAAA;IAElC,IAAA,iEAG4B,EAFhC,kCAAc,EACd,4CAAmB,CACa;IAE5B,IAAA,yEAG8C,EAFlD,sDAAwB,EACxB,oCAAe,CACmC;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,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAE1C,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,EAAE,IAAA,EAAE;KACvC,CAAA;AACH,CAAC;AA3BD,8CA2BC"} \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/extractorsFactory.d.ts b/build/commonjs/faceLandmarkNet/extractorsFactory.d.ts deleted file mode 100644 index 247236f3..00000000 --- a/build/commonjs/faceLandmarkNet/extractorsFactory.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ExtractWeightsFunction, ParamMapping } from 'tfjs-image-recognition-base'; -import { FCParams } from 'tfjs-tiny-yolov2'; -import { DenseBlock3Params, DenseBlock4Params } from './types'; -export declare function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]): { - extractDenseBlock3Params: (channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer?: boolean) => DenseBlock3Params; - extractDenseBlock4Params: (channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer?: boolean) => DenseBlock4Params; - extractFCParams: (channelsIn: number, channelsOut: number, mappedPrefix: string) => FCParams; -}; diff --git a/build/commonjs/faceLandmarkNet/extractorsFactory.js b/build/commonjs/faceLandmarkNet/extractorsFactory.js deleted file mode 100644 index b279b269..00000000 --- a/build/commonjs/faceLandmarkNet/extractorsFactory.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tf = require("@tensorflow/tfjs-core"); -var tfjs_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); -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_tiny_yolov2_1.SeparableConvParams(depthwise_filter, pointwise_filter, bias); - } - function extractFCParams(channelsIn, channelsOut, mappedPrefix) { - var weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]); - var bias = tf.tensor1d(extractWeights(channelsOut)); - paramMappings.push({ paramPath: mappedPrefix + "/weights" }, { paramPath: mappedPrefix + "/bias" }); - return { - weights: weights, - bias: bias - }; - } - var extractConvParams = tfjs_tiny_yolov2_1.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, - extractFCParams: extractFCParams - }; -} -exports.extractorsFactory = extractorsFactory; -//# sourceMappingURL=extractorsFactory.js.map \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/extractorsFactory.js.map b/build/commonjs/faceLandmarkNet/extractorsFactory.js.map deleted file mode 100644 index 17f9cf29..00000000 --- a/build/commonjs/faceLandmarkNet/extractorsFactory.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractorsFactory.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/extractorsFactory.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAE5C,qDAA2F;AAI3F,2BAAkC,cAAsC,EAAE,aAA6B;IAErG,oCAAoC,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,sCAAmB,CAC5B,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,yBAAyB,UAAkB,EAAE,WAAmB,EAAE,YAAoB;QACpF,IAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAA;QAChG,IAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAA;QAErD,aAAa,CAAC,IAAI,CAChB,EAAE,SAAS,EAAK,YAAY,aAAU,EAAE,EACxC,EAAE,SAAS,EAAK,YAAY,UAAO,EAAE,CACtC,CAAA;QAED,OAAO;YACL,OAAO,SAAA;YACP,IAAI,MAAA;SACL,CAAA;IACH,CAAC;IAED,IAAM,iBAAiB,GAAG,2CAAwB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;IAEjF,kCAAkC,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,kCAAkC,UAAkB,EAAE,WAAmB,EAAE,YAAoB,EAAE,YAA6B;QAA7B,6BAAA,EAAA,oBAA6B;QAEtH,IAAA,kFAAuG,EAArG,gBAAK,EAAE,gBAAK,EAAE,gBAAK,CAAkF;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;QACxB,eAAe,iBAAA;KAChB,CAAA;AAEH,CAAC;AA9DD,8CA8DC"} \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/fullyConnectedLayer.d.ts b/build/commonjs/faceLandmarkNet/fullyConnectedLayer.d.ts deleted file mode 100644 index f9f052aa..00000000 --- a/build/commonjs/faceLandmarkNet/fullyConnectedLayer.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { FCParams } from 'tfjs-tiny-yolov2'; -export declare function fullyConnectedLayer(x: tf.Tensor2D, params: FCParams): tf.Tensor2D; diff --git a/build/commonjs/faceLandmarkNet/fullyConnectedLayer.js b/build/commonjs/faceLandmarkNet/fullyConnectedLayer.js deleted file mode 100644 index 624c1d5e..00000000 --- a/build/commonjs/faceLandmarkNet/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/faceLandmarkNet/fullyConnectedLayer.js.map b/build/commonjs/faceLandmarkNet/fullyConnectedLayer.js.map deleted file mode 100644 index 2b35a335..00000000 --- a/build/commonjs/faceLandmarkNet/fullyConnectedLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fullyConnectedLayer.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/fullyConnectedLayer.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAG5C,6BACE,CAAc,EACd,MAAgB;IAEhB,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/faceLandmarkNet/index.d.ts b/build/commonjs/faceLandmarkNet/index.d.ts deleted file mode 100644 index 6e5d1cd4..00000000 --- a/build/commonjs/faceLandmarkNet/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { FaceLandmark68Net } from './FaceLandmark68Net'; -export * from './FaceLandmark68Net'; -export * from './FaceLandmark68TinyNet'; -export declare class FaceLandmarkNet extends FaceLandmark68Net { -} -export declare function createFaceLandmarkNet(weights: Float32Array): FaceLandmarkNet; diff --git a/build/commonjs/faceLandmarkNet/index.js b/build/commonjs/faceLandmarkNet/index.js deleted file mode 100644 index 8322f774..00000000 --- a/build/commonjs/faceLandmarkNet/index.js +++ /dev/null @@ -1,21 +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; -function createFaceLandmarkNet(weights) { - var net = new FaceLandmarkNet(); - net.extractWeights(weights); - return net; -} -exports.createFaceLandmarkNet = createFaceLandmarkNet; -//# 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 def228be..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;AAE5B,+BAAsC,OAAqB;IACzD,IAAM,GAAG,GAAG,IAAI,eAAe,EAAE,CAAA;IACjC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAJD,sDAIC"} \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/loadParamsFactory.d.ts b/build/commonjs/faceLandmarkNet/loadParamsFactory.d.ts deleted file mode 100644 index f4c2f6ad..00000000 --- a/build/commonjs/faceLandmarkNet/loadParamsFactory.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { FCParams } from 'tfjs-tiny-yolov2'; -import { DenseBlock3Params, DenseBlock4Params } from './types'; -export declare function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]): { - extractDenseBlock3Params: (prefix: string, isFirstLayer?: boolean) => DenseBlock3Params; - extractDenseBlock4Params: (prefix: string, isFirstLayer?: boolean) => DenseBlock4Params; - extractFcParams: (prefix: string) => FCParams; -}; diff --git a/build/commonjs/faceLandmarkNet/loadParamsFactory.js b/build/commonjs/faceLandmarkNet/loadParamsFactory.js deleted file mode 100644 index 0e434f68..00000000 --- a/build/commonjs/faceLandmarkNet/loadParamsFactory.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var tfjs_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); -function loadParamsFactory(weightMap, paramMappings) { - var extractWeightEntry = tfjs_image_recognition_base_1.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_tiny_yolov2_1.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 }; - } - function extractFcParams(prefix) { - var weights = extractWeightEntry(prefix + "/weights", 2); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { weights: weights, bias: bias }; - } - return { - extractDenseBlock3Params: extractDenseBlock3Params, - extractDenseBlock4Params: extractDenseBlock4Params, - extractFcParams: extractFcParams - }; -} -exports.loadParamsFactory = loadParamsFactory; -//# sourceMappingURL=loadParamsFactory.js.map \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/loadParamsFactory.js.map b/build/commonjs/faceLandmarkNet/loadParamsFactory.js.map deleted file mode 100644 index 71ceb0f3..00000000 --- a/build/commonjs/faceLandmarkNet/loadParamsFactory.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadParamsFactory.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/loadParamsFactory.ts"],"names":[],"mappings":";;AACA,2EAAsF;AACtF,qDAA6E;AAI7E,2BAAkC,SAAc,EAAE,aAA6B;IAE7E,IAAM,kBAAkB,GAAG,uDAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE9E,2BAA2B,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,oCAAoC,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,sCAAmB,CAC5B,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,kCAAkC,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,kCAAkC,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,yBAAyB,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,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;QACxB,eAAe,iBAAA;KAChB,CAAA;AACH,CAAC;AAxDD,8CAwDC"} \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/loadQuantizedParams.d.ts b/build/commonjs/faceLandmarkNet/loadQuantizedParams.d.ts deleted file mode 100644 index c5e1dc44..00000000 --- a/build/commonjs/faceLandmarkNet/loadQuantizedParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: ParamMapping[]; -}>; diff --git a/build/commonjs/faceLandmarkNet/loadQuantizedParams.js b/build/commonjs/faceLandmarkNet/loadQuantizedParams.js deleted file mode 100644 index bea29a7a..00000000 --- a/build/commonjs/faceLandmarkNet/loadQuantizedParams.js +++ /dev/null @@ -1,31 +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 loadParamsFactory_1 = require("./loadParamsFactory"); -var DEFAULT_MODEL_NAME = 'face_landmark_68_model'; -function loadQuantizedParams(uri) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var weightMap, paramMappings, _a, extractDenseBlock4Params, extractFcParams, params; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.loadWeightMap(uri, DEFAULT_MODEL_NAME)]; - case 1: - weightMap = _b.sent(); - paramMappings = []; - _a = loadParamsFactory_1.loadParamsFactory(weightMap, paramMappings), extractDenseBlock4Params = _a.extractDenseBlock4Params, extractFcParams = _a.extractFcParams; - params = { - dense0: extractDenseBlock4Params('dense0', true), - dense1: extractDenseBlock4Params('dense1'), - dense2: extractDenseBlock4Params('dense2'), - dense3: extractDenseBlock4Params('dense3'), - fc: extractFcParams('fc') - }; - tfjs_image_recognition_base_1.disposeUnusedWeightTensors(weightMap, paramMappings); - return [2 /*return*/, { params: params, paramMappings: paramMappings }]; - } - }); - }); -} -exports.loadQuantizedParams = loadQuantizedParams; -//# sourceMappingURL=loadQuantizedParams.js.map \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/loadQuantizedParams.js.map b/build/commonjs/faceLandmarkNet/loadQuantizedParams.js.map deleted file mode 100644 index 09988dc7..00000000 --- a/build/commonjs/faceLandmarkNet/loadQuantizedParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadQuantizedParams.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/loadQuantizedParams.ts"],"names":[],"mappings":";;;AAAA,2EAAsG;AAEtG,yDAAwD;AAGxD,IAAM,kBAAkB,GAAG,wBAAwB,CAAA;AAEnD,6BACE,GAAuB;;;;;wBAGL,qBAAM,2CAAa,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAA;;oBAAxD,SAAS,GAAG,SAA4C;oBACxD,aAAa,GAAmB,EAAE,CAAA;oBAElC,KAGF,qCAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,EAF7C,wBAAwB,8BAAA,EACxB,eAAe,qBAAA,CAC8B;oBAEzC,MAAM,GAAG;wBACb,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC;wBAChD,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;qBAC1B,CAAA;oBAED,wDAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;oBAEpD,sBAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,EAAA;;;;CACjC;AAvBD,kDAuBC"} \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/loadQuantizedParamsTiny.d.ts b/build/commonjs/faceLandmarkNet/loadQuantizedParamsTiny.d.ts deleted file mode 100644 index 36f4ea62..00000000 --- a/build/commonjs/faceLandmarkNet/loadQuantizedParamsTiny.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { TinyNetParams } from './types'; -export declare function loadQuantizedParamsTiny(uri: string | undefined): Promise<{ - params: TinyNetParams; - paramMappings: ParamMapping[]; -}>; diff --git a/build/commonjs/faceLandmarkNet/loadQuantizedParamsTiny.js b/build/commonjs/faceLandmarkNet/loadQuantizedParamsTiny.js deleted file mode 100644 index cee78ef9..00000000 --- a/build/commonjs/faceLandmarkNet/loadQuantizedParamsTiny.js +++ /dev/null @@ -1,30 +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 loadParamsFactory_1 = require("./loadParamsFactory"); -var DEFAULT_MODEL_NAME = 'face_landmark_68_tiny_model'; -function loadQuantizedParamsTiny(uri) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var weightMap, paramMappings, _a, extractDenseBlock3Params, extractFcParams, params; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.loadWeightMap(uri, DEFAULT_MODEL_NAME)]; - case 1: - weightMap = _b.sent(); - paramMappings = []; - _a = loadParamsFactory_1.loadParamsFactory(weightMap, paramMappings), extractDenseBlock3Params = _a.extractDenseBlock3Params, extractFcParams = _a.extractFcParams; - params = { - dense0: extractDenseBlock3Params('dense0', true), - dense1: extractDenseBlock3Params('dense1'), - dense2: extractDenseBlock3Params('dense2'), - fc: extractFcParams('fc') - }; - tfjs_image_recognition_base_1.disposeUnusedWeightTensors(weightMap, paramMappings); - return [2 /*return*/, { params: params, paramMappings: paramMappings }]; - } - }); - }); -} -exports.loadQuantizedParamsTiny = loadQuantizedParamsTiny; -//# sourceMappingURL=loadQuantizedParamsTiny.js.map \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/loadQuantizedParamsTiny.js.map b/build/commonjs/faceLandmarkNet/loadQuantizedParamsTiny.js.map deleted file mode 100644 index 99023f8f..00000000 --- a/build/commonjs/faceLandmarkNet/loadQuantizedParamsTiny.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadQuantizedParamsTiny.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/loadQuantizedParamsTiny.ts"],"names":[],"mappings":";;;AAAA,2EAAsG;AAEtG,yDAAwD;AAGxD,IAAM,kBAAkB,GAAG,6BAA6B,CAAA;AAExD,iCACE,GAAuB;;;;;wBAGL,qBAAM,2CAAa,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAA;;oBAAxD,SAAS,GAAG,SAA4C;oBACxD,aAAa,GAAmB,EAAE,CAAA;oBAElC,KAGF,qCAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,EAF7C,wBAAwB,8BAAA,EACxB,eAAe,qBAAA,CAC8B;oBAEzC,MAAM,GAAG;wBACb,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC;wBAChD,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;qBAC1B,CAAA;oBAED,wDAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;oBAEpD,sBAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,EAAA;;;;CACjC;AAtBD,0DAsBC"} \ No newline at end of file diff --git a/build/commonjs/faceLandmarkNet/types.d.ts b/build/commonjs/faceLandmarkNet/types.d.ts deleted file mode 100644 index 2e5131f8..00000000 --- a/build/commonjs/faceLandmarkNet/types.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ConvParams, FCParams, SeparableConvParams } from 'tfjs-tiny-yolov2'; -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 FCWithBatchNormParams = BatchNormParams & { - weights: tf.Tensor2D; -}; -export declare type DenseBlock3Params = { - conv0: SeparableConvParams | ConvParams; - conv1: SeparableConvParams; - conv2: SeparableConvParams; -}; -export declare type DenseBlock4Params = DenseBlock3Params & { - conv3: SeparableConvParams; -}; -export declare type TinyNetParams = { - dense0: DenseBlock3Params; - dense1: DenseBlock3Params; - dense2: DenseBlock3Params; - fc: FCParams; -}; -export declare type NetParams = { - dense0: DenseBlock4Params; - dense1: DenseBlock4Params; - dense2: DenseBlock4Params; - dense3: DenseBlock4Params; - fc: FCParams; -}; diff --git a/build/commonjs/faceLandmarkNet/types.js b/build/commonjs/faceLandmarkNet/types.js deleted file mode 100644 index 11e638d1..00000000 --- a/build/commonjs/faceLandmarkNet/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/faceLandmarkNet/types.js.map b/build/commonjs/faceLandmarkNet/types.js.map deleted file mode 100644 index 7dfe1a59..00000000 --- a/build/commonjs/faceLandmarkNet/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/types.ts"],"names":[],"mappings":""} \ 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 f34abc0c..00000000 --- a/build/commonjs/faceRecognitionNet/FaceRecognitionNet.d.ts +++ /dev/null @@ -1,23 +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 loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }>; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }; -} diff --git a/build/commonjs/faceRecognitionNet/FaceRecognitionNet.js b/build/commonjs/faceRecognitionNet/FaceRecognitionNet.js deleted file mode 100644 index 55d18628..00000000 --- a/build/commonjs/faceRecognitionNet/FaceRecognitionNet.js +++ /dev/null @@ -1,88 +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 loadQuantizedParams_1 = require("./loadQuantizedParams"); -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 _this = this; - var netInput, faceDescriptorTensors, faceDescriptorsForBatch; - 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.loadQuantizedParams = function (uri) { - return loadQuantizedParams_1.loadQuantizedParams(uri); - }; - 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 78bd1a92..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 e2461b73..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,mBACE,CAAc,EACd,MAAuB,EACvB,OAAyB,EACzB,QAAiB,EACjB,OAAkC;IAAlC,wBAAA,EAAA,gBAAkC;IAE5B,IAAA,gBAA+B,EAA7B,oBAAO,EAAE,cAAI,CAAgB;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,cAAqB,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,oBAA2B,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,kBAAyB,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 40295777..00000000 --- a/build/commonjs/faceRecognitionNet/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: ParamMapping[]; -}; diff --git a/build/commonjs/faceRecognitionNet/extractParams.js b/build/commonjs/faceRecognitionNet/extractParams.js deleted file mode 100644 index 46740854..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.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 c8dc262e..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":";;AAAA,0CAA4C;AAC5C,2EAAmH;AAKnH,2BAA2B,cAAsC,EAAE,aAA6B;IAE9F,6BAA6B,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,qCAAO,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,2BACE,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,iCAAiC,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,gCACE,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,oCACE,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,uBAA8B,OAAqB;IAE3C,IAAA,iEAG4B,EAFhC,kCAAc,EACd,4CAAmB,CACa;IAElC,IAAM,aAAa,GAAmB,EAAE,CAAA;IAElC,IAAA,qDAG8C,EAFlD,kDAAsB,EACtB,0DAA0B,CACwB;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;AA9DD,sCA8DC"} \ 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 e150e83a..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,kCAAyC,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/loadQuantizedParams.d.ts b/build/commonjs/faceRecognitionNet/loadQuantizedParams.d.ts deleted file mode 100644 index c5e1dc44..00000000 --- a/build/commonjs/faceRecognitionNet/loadQuantizedParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: ParamMapping[]; -}>; diff --git a/build/commonjs/faceRecognitionNet/loadQuantizedParams.js b/build/commonjs/faceRecognitionNet/loadQuantizedParams.js deleted file mode 100644 index e726e443..00000000 --- a/build/commonjs/faceRecognitionNet/loadQuantizedParams.js +++ /dev/null @@ -1,85 +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 DEFAULT_MODEL_NAME = 'face_recognition_model'; -function extractorsFactory(weightMap, paramMappings) { - var extractWeightEntry = tfjs_image_recognition_base_1.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 loadQuantizedParams(uri) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var weightMap, paramMappings, _a, extractConvLayerParams, extractResidualLayerParams, conv32_down, conv32_1, conv32_2, conv32_3, conv64_down, conv64_1, conv64_2, conv64_3, conv128_down, conv128_1, conv128_2, conv256_down, conv256_1, conv256_2, conv256_down_out, fc, params; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.loadWeightMap(uri, DEFAULT_MODEL_NAME)]; - case 1: - weightMap = _b.sent(); - paramMappings = []; - _a = extractorsFactory(weightMap, paramMappings), extractConvLayerParams = _a.extractConvLayerParams, extractResidualLayerParams = _a.extractResidualLayerParams; - conv32_down = extractConvLayerParams('conv32_down'); - conv32_1 = extractResidualLayerParams('conv32_1'); - conv32_2 = extractResidualLayerParams('conv32_2'); - conv32_3 = extractResidualLayerParams('conv32_3'); - conv64_down = extractResidualLayerParams('conv64_down'); - conv64_1 = extractResidualLayerParams('conv64_1'); - conv64_2 = extractResidualLayerParams('conv64_2'); - conv64_3 = extractResidualLayerParams('conv64_3'); - conv128_down = extractResidualLayerParams('conv128_down'); - conv128_1 = extractResidualLayerParams('conv128_1'); - conv128_2 = extractResidualLayerParams('conv128_2'); - conv256_down = extractResidualLayerParams('conv256_down'); - conv256_1 = extractResidualLayerParams('conv256_1'); - conv256_2 = extractResidualLayerParams('conv256_2'); - conv256_down_out = extractResidualLayerParams('conv256_down_out'); - 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); - } - 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.disposeUnusedWeightTensors(weightMap, paramMappings); - return [2 /*return*/, { params: params, paramMappings: paramMappings }]; - } - }); - }); -} -exports.loadQuantizedParams = loadQuantizedParams; -//# sourceMappingURL=loadQuantizedParams.js.map \ No newline at end of file diff --git a/build/commonjs/faceRecognitionNet/loadQuantizedParams.js.map b/build/commonjs/faceRecognitionNet/loadQuantizedParams.js.map deleted file mode 100644 index 0bbd9841..00000000 --- a/build/commonjs/faceRecognitionNet/loadQuantizedParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadQuantizedParams.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/loadQuantizedParams.ts"],"names":[],"mappings":"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"} \ 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 8a5fca7d..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,kBAAyB,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,sBAA6B,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 c451368d..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,eAAsB,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 8f3446d4..00000000 --- a/build/commonjs/faceRecognitionNet/types.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ConvParams } from 'tfjs-tiny-yolov2'; -export declare type ScaleLayerParams = { - weights: tf.Tensor1D; - biases: tf.Tensor1D; -}; -export declare type ResidualLayerParams = { - conv1: ConvLayerParams; - conv2: ConvLayerParams; -}; -export declare type ConvLayerParams = { - conv: 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/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 702d2e34..00000000 --- a/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetectionWithLandmarks } from '../classes/FaceDetectionWithLandmarks'; -import { FullFaceDescription } from '../classes/FullFaceDescription'; -import { ComposableTask } from './ComposableTask'; -export declare class ComputeFaceDescriptorsTaskBase extends ComposableTask { - protected detectFaceLandmarksTask: ComposableTask | Promise; - protected input: TNetInput; - constructor(detectFaceLandmarksTask: ComposableTask | Promise, input: TNetInput); -} -export declare class ComputeAllFaceDescriptorsTask extends ComputeFaceDescriptorsTaskBase { - run(): Promise; -} -export declare class ComputeSingleFaceDescriptorTask extends ComputeFaceDescriptorsTaskBase { - run(): Promise; -} diff --git a/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.js b/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.js deleted file mode 100644 index 5a2b52de..00000000 --- a/build/commonjs/globalApi/ComputeFaceDescriptorsTasks.js +++ /dev/null @@ -1,92 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var FullFaceDescription_1 = require("../classes/FullFaceDescription"); -var dom_1 = require("../dom"); -var ComposableTask_1 = require("./ComposableTask"); -var nets_1 = require("./nets"); -var ComputeFaceDescriptorsTaskBase = /** @class */ (function (_super) { - tslib_1.__extends(ComputeFaceDescriptorsTaskBase, _super); - function ComputeFaceDescriptorsTaskBase(detectFaceLandmarksTask, input) { - var _this = _super.call(this) || this; - _this.detectFaceLandmarksTask = detectFaceLandmarksTask; - _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 _this = this; - var facesWithLandmarks, alignedFaceCanvases; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.detectFaceLandmarksTask]; - case 1: - facesWithLandmarks = _a.sent(); - return [4 /*yield*/, dom_1.extractFaces(this.input, facesWithLandmarks.map(function (_a) { - var landmarks = _a.landmarks; - return landmarks.align(); - }))]; - case 2: - alignedFaceCanvases = _a.sent(); - return [4 /*yield*/, Promise.all(facesWithLandmarks.map(function (_a, i) { - var detection = _a.detection, landmarks = _a.landmarks; - return tslib_1.__awaiter(_this, void 0, void 0, function () { - var descriptor; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, nets_1.nets.faceRecognitionNet.computeFaceDescriptor(alignedFaceCanvases[i])]; - case 1: - descriptor = _b.sent(); - return [2 /*return*/, new FullFaceDescription_1.FullFaceDescription(detection, landmarks, descriptor)]; - } - }); - }); - }))]; - case 3: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - 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 detectionWithLandmarks, detection, landmarks, alignedRect, alignedFaceCanvas, descriptor; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.detectFaceLandmarksTask]; - case 1: - detectionWithLandmarks = _a.sent(); - if (!detectionWithLandmarks) { - return [2 /*return*/]; - } - detection = detectionWithLandmarks.detection, landmarks = detectionWithLandmarks.landmarks, alignedRect = detectionWithLandmarks.alignedRect; - return [4 /*yield*/, dom_1.extractFaces(this.input, [alignedRect])]; - case 2: - alignedFaceCanvas = (_a.sent())[0]; - return [4 /*yield*/, nets_1.nets.faceRecognitionNet.computeFaceDescriptor(alignedFaceCanvas)]; - case 3: - descriptor = _a.sent(); - return [2 /*return*/, new FullFaceDescription_1.FullFaceDescription(detection, landmarks, 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 a37b6c37..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":";;;AAGA,sEAAqE;AACrE,8BAAsC;AACtC,mDAAkD;AAClD,+BAA8B;AAE9B;IAA4F,0DAAuB;IACjH,wCACY,uBAA+G,EAC/G,KAAgB;QAF5B,YAIE,iBAAO,SACR;QAJW,6BAAuB,GAAvB,uBAAuB,CAAwF;QAC/G,WAAK,GAAL,KAAK,CAAW;;IAG5B,CAAC;IACH,qCAAC;AAAD,CAAC,AAPD,CAA4F,+BAAc,GAOzG;AAPY,wEAA8B;AAS3C;IAAmD,yDAAmF;IAAtI;;IAeA,CAAC;IAbc,2CAAG,GAAhB;;;;;;4BAE6B,qBAAM,IAAI,CAAC,uBAAuB,EAAA;;wBAAvD,kBAAkB,GAAG,SAAkC;wBACjC,qBAAM,kBAAY,CAC5C,IAAI,CAAC,KAAK,EACV,kBAAkB,CAAC,GAAG,CAAC,UAAC,EAAa;oCAAX,wBAAS;gCAAO,OAAA,SAAS,CAAC,KAAK,EAAE;4BAAjB,CAAiB,CAAC,CAC7D,EAAA;;wBAHK,mBAAmB,GAAG,SAG3B;wBAEM,qBAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAO,EAAwB,EAAE,CAAC;oCAAzB,wBAAS,EAAE,wBAAS;;;;;oDACxD,qBAAM,WAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAA;;gDAAxF,UAAU,GAAG,SAA2F;gDAC9G,sBAAO,IAAI,yCAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,EAAA;;;;6BACjE,CAAC,CAAC,EAAA;4BAHH,sBAAO,SAGJ,EAAA;;;;KACJ;IACH,oCAAC;AAAD,CAAC,AAfD,CAAmD,8BAA8B,GAehF;AAfY,sEAA6B;AAiB1C;IAAqD,2DAAuG;IAA5J;;IAeA,CAAC;IAbc,6CAAG,GAAhB;;;;;4BAEiC,qBAAM,IAAI,CAAC,uBAAuB,EAAA;;wBAA3D,sBAAsB,GAAG,SAAkC;wBACjE,IAAI,CAAC,sBAAsB,EAAE;4BAC3B,sBAAM;yBACP;wBAEO,SAAS,GAA6B,sBAAsB,UAAnD,EAAE,SAAS,GAAkB,sBAAsB,UAAxC,EAAE,WAAW,GAAK,sBAAsB,YAA3B,CAA2B;wBACzC,qBAAM,kBAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC,EAAA;;wBAAlE,iBAAiB,GAAG,CAAC,SAA6C,CAAC,CAAC,CAAC,CAAC;wBACzD,qBAAM,WAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,EAAA;;wBAAnF,UAAU,GAAG,SAAsF;wBAEzG,sBAAO,IAAI,yCAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,EAAA;;;;KACjE;IACH,sCAAC;AAAD,CAAC,AAfD,CAAqD,8BAA8B,GAelF;AAfY,0EAA+B"} \ 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 2bcb6adf..00000000 --- a/build/commonjs/globalApi/DetectFaceLandmarksTasks.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { FaceDetectionWithLandmarks } from '../classes/FaceDetectionWithLandmarks'; -import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net'; -import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet'; -import { ComposableTask } from './ComposableTask'; -import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks'; -export declare class DetectFaceLandmarksTaskBase extends ComposableTask { - protected detectFacesTask: ComposableTask | Promise; - protected input: TNetInput; - protected useTinyLandmarkNet: boolean; - constructor(detectFacesTask: ComposableTask | Promise, input: TNetInput, useTinyLandmarkNet: boolean); - protected readonly landmarkNet: FaceLandmark68Net | FaceLandmark68TinyNet; -} -export declare class DetectAllFaceLandmarksTask extends DetectFaceLandmarksTaskBase { - run(): Promise; - withFaceDescriptors(): ComputeAllFaceDescriptorsTask; -} -export declare class DetectSingleFaceLandmarksTask extends DetectFaceLandmarksTaskBase { - run(): Promise; - withFaceDescriptor(): ComputeSingleFaceDescriptorTask; -} diff --git a/build/commonjs/globalApi/DetectFaceLandmarksTasks.js b/build/commonjs/globalApi/DetectFaceLandmarksTasks.js deleted file mode 100644 index 0de05688..00000000 --- a/build/commonjs/globalApi/DetectFaceLandmarksTasks.js +++ /dev/null @@ -1,96 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var FaceDetectionWithLandmarks_1 = require("../classes/FaceDetectionWithLandmarks"); -var dom_1 = require("../dom"); -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(detectFacesTask, input, useTinyLandmarkNet) { - var _this = _super.call(this) || this; - _this.detectFacesTask = detectFacesTask; - _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 _this = this; - var detections, faceCanvases, faceLandmarksByFace; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.detectFacesTask]; - case 1: - detections = _a.sent(); - return [4 /*yield*/, dom_1.extractFaces(this.input, detections)]; - case 2: - faceCanvases = _a.sent(); - return [4 /*yield*/, Promise.all(faceCanvases.map(function (canvas) { return _this.landmarkNet.detectLandmarks(canvas); }))]; - case 3: - faceLandmarksByFace = _a.sent(); - return [2 /*return*/, detections.map(function (detection, i) { - return new FaceDetectionWithLandmarks_1.FaceDetectionWithLandmarks(detection, 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 detection, faceCanvas, _a, _b; - return tslib_1.__generator(this, function (_c) { - switch (_c.label) { - case 0: return [4 /*yield*/, this.detectFacesTask]; - case 1: - detection = _c.sent(); - if (!detection) { - return [2 /*return*/]; - } - return [4 /*yield*/, dom_1.extractFaces(this.input, [detection])]; - case 2: - faceCanvas = (_c.sent())[0]; - _a = FaceDetectionWithLandmarks_1.FaceDetectionWithLandmarks.bind; - _b = [void 0, detection]; - return [4 /*yield*/, this.landmarkNet.detectLandmarks(faceCanvas)]; - case 3: return [2 /*return*/, new (_a.apply(FaceDetectionWithLandmarks_1.FaceDetectionWithLandmarks, _b.concat([_c.sent()])))()]; - } - }); - }); - }; - 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 8c77ef98..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":";;;AAGA,oFAAmF;AAEnF,8BAAsC;AAGtC,mDAAkD;AAClD,6EAA+G;AAC/G,+BAA8B;AAE9B;IAAoF,uDAA0B;IAC5G,qCACY,eAAuF,EACvF,KAAgB,EAChB,kBAA2B;QAHvC,YAKE,iBAAO,SACR;QALW,qBAAe,GAAf,eAAe,CAAwE;QACvF,WAAK,GAAL,KAAK,CAAW;QAChB,wBAAkB,GAAlB,kBAAkB,CAAS;;IAGvC,CAAC;IAED,sBAAc,oDAAW;aAAzB;YACE,OAAO,IAAI,CAAC,kBAAkB;gBAC5B,CAAC,CAAC,WAAI,CAAC,qBAAqB;gBAC5B,CAAC,CAAC,WAAI,CAAC,iBAAiB,CAAA;QAC5B,CAAC;;;OAAA;IACH,kCAAC;AAAD,CAAC,AAdD,CAAoF,+BAAc,GAcjG;AAdY,kEAA2B;AAgBxC;IAAgD,sDAA0E;IAA1H;;IAmBA,CAAC;IAjBc,wCAAG,GAAhB;;;;;;4BAEqB,qBAAM,IAAI,CAAC,eAAe,EAAA;;wBAAvC,UAAU,GAAG,SAA0B;wBACxB,qBAAM,kBAAY,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAA;;wBAAzD,YAAY,GAAG,SAA0C;wBAEnC,qBAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAC5D,UAAA,MAAM,IAAI,OAAA,KAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,EAAxC,CAAwC,CACnD,CAAC,EAAA;;wBAFI,mBAAmB,GAAG,SAEL;wBAEvB,sBAAO,UAAU,CAAC,GAAG,CAAC,UAAC,SAAS,EAAE,CAAC;gCACjC,OAAA,IAAI,uDAA0B,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;4BAAjE,CAAiE,CAClE,EAAA;;;;KACF;IAED,wDAAmB,GAAnB;QACE,OAAO,IAAI,2DAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5D,CAAC;IACH,iCAAC;AAAD,CAAC,AAnBD,CAAgD,2BAA2B,GAmB1E;AAnBY,gEAA0B;AAqBvC;IAAmD,yDAA8F;IAAjJ;;IAmBA,CAAC;IAjBc,2CAAG,GAAhB;;;;;4BAEoB,qBAAM,IAAI,CAAC,eAAe,EAAA;;wBAAtC,SAAS,GAAG,SAA0B;wBAC5C,IAAI,CAAC,SAAS,EAAE;4BACd,sBAAM;yBACP;wBAEmB,qBAAM,kBAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,EAAA;;wBAAzD,UAAU,GAAG,CAAC,SAA2C,CAAC,CAAC,CAAC,CAAC;6BACxD,uDAA0B;sCACnC,SAAS;wBACT,qBAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,EAAA;4BAFpD,sBAAO,cAAI,uDAA0B,aAEnC,SAAqE,MACtE,EAAA;;;;KACF;IAED,0DAAkB,GAAlB;QACE,OAAO,IAAI,6DAA+B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9D,CAAC;IACH,oCAAC;AAAD,CAAC,AAnBD,CAAmD,2BAA2B,GAmB7E;AAnBY,sEAA6B"} \ 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 a0b73885..00000000 --- a/build/commonjs/globalApi/DetectFacesTasks.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { ComposableTask } from './ComposableTask'; -import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks'; -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; - withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectAllFaceLandmarksTask; -} -export declare class DetectSingleFaceTask extends DetectFacesTaskBase { - run(): Promise; - withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectSingleFaceLandmarksTask; -} diff --git a/build/commonjs/globalApi/DetectFacesTasks.js b/build/commonjs/globalApi/DetectFacesTasks.js deleted file mode 100644 index 443cd2d4..00000000 --- a/build/commonjs/globalApi/DetectFacesTasks.js +++ /dev/null @@ -1,85 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); -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 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.faceDetection; })]; - 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_tiny_yolov2_1.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.withFaceLandmarks = function (useTinyLandmarkNet) { - if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; } - return new DetectFaceLandmarksTasks_1.DetectAllFaceLandmarksTask(this, this.input, useTinyLandmarkNet); - }; - 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 () { - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, new DetectAllFacesTask(this.input, this.options)]; - case 1: return [2 /*return*/, (_a.sent()) - .sort(function (f1, f2) { return f1.score - f2.score; })[0]]; - } - }); - }); - }; - DetectSingleFaceTask.prototype.withFaceLandmarks = function (useTinyLandmarkNet) { - if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; } - return new DetectFaceLandmarksTasks_1.DetectSingleFaceLandmarksTask(this, this.input, useTinyLandmarkNet); - }; - 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 8cd81df5..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":";;;AACA,qDAAqD;AAGrD,sDAAqD;AACrD,iFAAgF;AAChF,uFAAsF;AACtF,mDAAkD;AAClD,uEAAuG;AACvG,+BAA8B;AAG9B;IAAkD,+CAAuB;IACvE,6BACY,KAAgB,EAChB,OAA2D;QAA3D,wBAAA,EAAA,cAAoC,6CAAqB,EAAE;QAFvE,YAIE,iBAAO,SACR;QAJW,WAAK,GAAL,KAAK,CAAW;QAChB,aAAO,GAAP,OAAO,CAAoD;;IAGvE,CAAC;IACH,0BAAC;AAAD,CAAC,AAPD,CAAkD,+BAAc,GAO/D;AAPY,kDAAmB;AAShC;IAAwC,8CAAoC;IAA5E;;IAkCA,CAAC;IAhCc,gCAAG,GAAhB;;;;;;wBAEQ,KAAqB,IAAI,EAAvB,KAAK,WAAA,EAAE,OAAO,aAAA,CAAS;6BAE3B,CAAA,OAAO,YAAY,2BAAY,CAAA,EAA/B,wBAA+B;wBACzB,qBAAM,WAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAA;4BAAhD,sBAAO,CAAC,SAAwC,CAAC;6BAC9C,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,aAAa,EAApB,CAAoB,CAAC,EAAA;;wBAGlC,qBAAqB,GAAG,OAAO,YAAY,iDAAuB;4BACtE,CAAC,CAAC,UAAC,KAAgB,IAAK,OAAA,WAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAjD,CAAiD;4BACzE,CAAC,CAAC,CACA,OAAO,YAAY,6CAAqB;gCACtC,CAAC,CAAC,UAAC,KAAgB,IAAK,OAAA,WAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAA/C,CAA+C;gCACvE,CAAC,CAAC,CACA,OAAO,YAAY,oCAAiB;oCAClC,CAAC,CAAC,UAAC,KAAgB,IAAK,OAAA,WAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAA3C,CAA2C;oCACnE,CAAC,CAAC,IAAI,CACT,CACJ,CAAA;wBAEH,IAAI,CAAC,qBAAqB,EAAE;4BAC1B,MAAM,IAAI,KAAK,CAAC,qIAAqI,CAAC,CAAA;yBACvJ;wBAED,sBAAO,qBAAqB,CAAC,KAAK,CAAC,EAAA;;;;KACpC;IAED,8CAAiB,GAAjB,UAAkB,kBAAmC;QAAnC,mCAAA,EAAA,0BAAmC;QACnD,OAAO,IAAI,qDAA0B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;IAC7E,CAAC;IAEH,yBAAC;AAAD,CAAC,AAlCD,CAAwC,mBAAmB,GAkC1D;AAlCY,gDAAkB;AAoC/B;IAA0C,gDAA8C;IAAxF;;IAWA,CAAC;IATc,kCAAG,GAAhB;;;;4BACU,qBAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAA;4BAA9D,sBAAO,CAAC,SAAsD,CAAC;6BAC5D,IAAI,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,EAAnB,CAAmB,CAAC,CAAC,CAAC,CAAC,EAAA;;;;KAC5C;IAED,gDAAiB,GAAjB,UAAkB,kBAAmC;QAAnC,mCAAA,EAAA,0BAAmC;QACnD,OAAO,IAAI,wDAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;IAChF,CAAC;IAEH,2BAAC;AAAD,CAAC,AAXD,CAA0C,mBAAmB,GAW5D;AAXY,oDAAoB"} \ 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 ea61bac1..00000000 --- a/build/commonjs/globalApi/FaceMatcher.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { FaceMatch } from '../classes/FaceMatch'; -import { FullFaceDescription } from '../classes/FullFaceDescription'; -import { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors'; -export declare class FaceMatcher { - private _labeledDescriptors; - private _distanceThreshold; - constructor(inputs: LabeledFaceDescriptors | FullFaceDescription | Float32Array | Array, 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 ff975267..00000000 --- a/build/commonjs/globalApi/FaceMatcher.js +++ /dev/null @@ -1,64 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var FaceMatch_1 = require("../classes/FaceMatch"); -var FullFaceDescription_1 = require("../classes/FullFaceDescription"); -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 FullFaceDescription_1.FullFaceDescription) { - return new LabeledFaceDescriptors_1.LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]); - } - if (desc instanceof Float32Array) { - return new LabeledFaceDescriptors_1.LabeledFaceDescriptors(createUniqueLabel(), [desc]); - } - throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | FullFaceDescription | Float32Array | Array"); - }); - } - 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 2a8bc76e..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,sEAAqE;AACrE,4EAA2E;AAC3E,0DAAyD;AAEzD;IAKE,qBACE,MAAwI,EACxI,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,yCAAmB,EAAE;gBACvC,OAAO,IAAI,+CAAsB,CAAC,iBAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;aAC1E;YAED,IAAI,IAAI,YAAY,YAAY,EAAE;gBAChC,OAAO,IAAI,+CAAsB,CAAC,iBAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;aAC/D;YAED,MAAM,IAAI,KAAK,CAAC,6LAA6L,CAAC,CAAA;QAChN,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/allFaces.d.ts b/build/commonjs/globalApi/allFaces.d.ts deleted file mode 100644 index 7c682877..00000000 --- a/build/commonjs/globalApi/allFaces.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { ITinyYolov2Options } from 'tfjs-tiny-yolov2'; -import { FullFaceDescription } from '../classes'; -import { IMtcnnOptions } from '../mtcnn/MtcnnOptions'; -export declare function allFacesSsdMobilenetv1(input: TNetInput, minConfidence?: number): Promise; -export declare function allFacesTinyYolov2(input: TNetInput, forwardParams?: 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 3b072bcb..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_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); -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_tiny_yolov2_1.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 e0e16584..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":";;;AACA,qDAAyE;AAGzE,sDAAoE;AACpE,oDAA0D;AAC1D,6CAA+C;AAE/C,iDAAiD;AAEjD,gCACE,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,4BACE,KAAgB,EAChB,aAAsC;IAAtC,8BAAA,EAAA,kBAAsC;;;;wBAE/B,qBAAM,4BAAc,CAAC,KAAK,EAAE,IAAI,oCAAiB,CAAC,aAAa,CAAC,CAAC;yBACrE,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAPD,gDAOC;AAED,uBACE,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 35e80dda..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,0BACE,KAAgB,EAChB,OAA2D;IAA3D,wBAAA,EAAA,cAAoC,6CAAqB,EAAE;IAE3D,OAAO,IAAI,uCAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AACjD,CAAC;AALD,4CAKC;AAED,wBACE,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 bd264f40..00000000 --- a/build/commonjs/globalApi/nets.d.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { ITinyYolov2Options } from 'tfjs-tiny-yolov2'; -import { FaceDetection } from '../classes/FaceDetection'; -import { FaceDetectionWithLandmarks } from '../classes/FaceDetectionWithLandmarks'; -import { FaceLandmarks5 } from '../classes/FaceLandmarks5'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net'; -import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet'; -import { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet'; -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/TinyYolov2'; -export declare const nets: { - ssdMobilenetv1: SsdMobilenetv1; - tinyFaceDetector: TinyFaceDetector; - tinyYolov2: TinyYolov2; - mtcnn: Mtcnn; - faceLandmark68Net: FaceLandmark68Net; - faceLandmark68TinyNet: FaceLandmark68TinyNet; - faceRecognitionNet: FaceRecognitionNet; -}; -/** - * 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: 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; -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 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 ffff067c..00000000 --- a/build/commonjs/globalApi/nets.js +++ /dev/null @@ -1,106 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -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/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() -}; -/** - * 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); -}; -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); }; -// 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 c9a37a20..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 085925da..00000000 --- a/build/commonjs/globalApi/types.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { TinyYolov2Options } from 'tfjs-tiny-yolov2'; -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 | 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 c7b129b4..00000000 --- a/build/commonjs/index.d.ts +++ /dev/null @@ -1,13 +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 './faceLandmarkNet/index'; -export * from './faceRecognitionNet/index'; -export * from './globalApi/index'; -export * from './mtcnn/index'; -export * from './ssdMobilenetv1/index'; -export * from './tinyFaceDetector/index'; -export * from './tinyYolov2/index'; -export * from './euclideanDistance'; diff --git a/build/commonjs/index.js b/build/commonjs/index.js deleted file mode 100644 index e9d5ff6b..00000000 --- a/build/commonjs/index.js +++ /dev/null @@ -1,17 +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("./faceLandmarkNet/index"), exports); -tslib_1.__exportStar(require("./faceRecognitionNet/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); -//# 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 6b0e6455..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,kEAAwC;AACxC,qEAA2C;AAC3C,4DAAkC;AAClC,wDAA8B;AAC9B,iEAAuC;AACvC,mEAAyC;AACzC,6DAAmC;AAEnC,8DAAoC"} \ 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 68215c54..00000000 --- a/build/commonjs/mtcnn/Mtcnn.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetectionWithLandmarks } from '../classes/FaceDetectionWithLandmarks'; -import { FaceLandmarks5 } from '../classes/FaceLandmarks5'; -import { IMtcnnOptions } from './MtcnnOptions'; -import { NetParams } from './types'; -export declare class Mtcnn extends NeuralNetwork { - constructor(); - forwardInput(input: NetInput, forwardParams?: IMtcnnOptions): Promise<{ - results: FaceDetectionWithLandmarks[]; - stats: any; - }>; - forward(input: TNetInput, forwardParams?: IMtcnnOptions): Promise[]>; - forwardWithStats(input: TNetInput, forwardParams?: IMtcnnOptions): Promise<{ - results: FaceDetectionWithLandmarks[]; - stats: any; - }>; - protected loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }>; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }; -} diff --git a/build/commonjs/mtcnn/Mtcnn.js b/build/commonjs/mtcnn/Mtcnn.js deleted file mode 100644 index e6faa35d..00000000 --- a/build/commonjs/mtcnn/Mtcnn.js +++ /dev/null @@ -1,135 +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 FaceDetectionWithLandmarks_1 = require("../classes/FaceDetectionWithLandmarks"); -var FaceLandmarks5_1 = require("../classes/FaceLandmarks5"); -var bgrToRgbTensor_1 = require("./bgrToRgbTensor"); -var config_1 = require("./config"); -var extractParams_1 = require("./extractParams"); -var getSizesForScale_1 = require("./getSizesForScale"); -var loadQuantizedParams_1 = require("./loadQuantizedParams"); -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.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 new FaceDetectionWithLandmarks_1.FaceDetectionWithLandmarks(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])]; - } - }); - }); - }; - // none of the param tensors are quantized yet - Mtcnn.prototype.loadQuantizedParams = function (uri) { - return loadQuantizedParams_1.loadQuantizedParams(uri); - }; - 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 cfd239b6..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 ed24b4cd..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 50ace1cf..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_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); -var fullyConnectedLayer_1 = require("../faceLandmarkNet/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_tiny_yolov2_1.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 c92c2e34..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,qDAA6C;AAE7C,8EAA6E;AAC7E,iCAAgC;AAChC,+CAA6C;AAG7C,cAAqB,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,4BAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC3C,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 696fd4ec..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_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); -var sharedLayers_1 = require("./sharedLayers"); -function PNet(x, params) { - return tf.tidy(function () { - var out = sharedLayers_1.sharedLayer(x, params, true); - var conv = tfjs_tiny_yolov2_1.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_tiny_yolov2_1.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 23c90ad1..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,qDAA6C;AAE7C,+CAA6C;AAG7C,cAAqB,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,4BAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACpD,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,4BAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAEvD,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 2f975438..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("../faceLandmarkNet/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 7a899d11..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,8EAA6E;AAC7E,iCAAgC;AAChC,+CAA6C;AAG7C,cAAqB,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 46669a11..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,wBAA+B,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 c5217d49..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 8498f1b8..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 _this = this; - var imgCtx, bitmaps, imagePatchesDatas; - 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*/, 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 78996d2b..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,2EAAkG;AAElG,yCAAwC;AAExC,6BACE,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,iBAAiB,CAAC,OAAO,CAAC,EAAA;;6BAClC,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 40295777..00000000 --- a/build/commonjs/mtcnn/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: ParamMapping[]; -}; diff --git a/build/commonjs/mtcnn/extractParams.js b/build/commonjs/mtcnn/extractParams.js deleted file mode 100644 index 31a8189b..00000000 --- a/build/commonjs/mtcnn/extractParams.js +++ /dev/null @@ -1,69 +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 tfjs_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); -function extractorsFactory(extractWeights, paramMappings) { - var extractConvParams = tfjs_tiny_yolov2_1.extractConvParamsFactory(extractWeights, paramMappings); - var extractFCParams = tfjs_tiny_yolov2_1.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.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 7f78c4f5..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/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 8eb9fe46..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,0BAAiC,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 c767f401..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,qBAA4B,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/loadQuantizedParams.d.ts b/build/commonjs/mtcnn/loadQuantizedParams.d.ts deleted file mode 100644 index c5e1dc44..00000000 --- a/build/commonjs/mtcnn/loadQuantizedParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: ParamMapping[]; -}>; diff --git a/build/commonjs/mtcnn/loadQuantizedParams.js b/build/commonjs/mtcnn/loadQuantizedParams.js deleted file mode 100644 index 65f271ee..00000000 --- a/build/commonjs/mtcnn/loadQuantizedParams.js +++ /dev/null @@ -1,81 +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 DEFAULT_MODEL_NAME = 'mtcnn_model'; -function extractorsFactory(weightMap, paramMappings) { - var extractWeightEntry = tfjs_image_recognition_base_1.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 loadQuantizedParams(uri) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var weightMap, paramMappings, _a, extractPNetParams, extractRNetParams, extractONetParams, pnet, rnet, onet; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.loadWeightMap(uri, DEFAULT_MODEL_NAME)]; - case 1: - weightMap = _b.sent(); - paramMappings = []; - _a = extractorsFactory(weightMap, paramMappings), extractPNetParams = _a.extractPNetParams, extractRNetParams = _a.extractRNetParams, extractONetParams = _a.extractONetParams; - pnet = extractPNetParams(); - rnet = extractRNetParams(); - onet = extractONetParams(); - tfjs_image_recognition_base_1.disposeUnusedWeightTensors(weightMap, paramMappings); - return [2 /*return*/, { params: { pnet: pnet, rnet: rnet, onet: onet }, paramMappings: paramMappings }]; - } - }); - }); -} -exports.loadQuantizedParams = loadQuantizedParams; -//# sourceMappingURL=loadQuantizedParams.js.map \ No newline at end of file diff --git a/build/commonjs/mtcnn/loadQuantizedParams.js.map b/build/commonjs/mtcnn/loadQuantizedParams.js.map deleted file mode 100644 index 0633bd30..00000000 --- a/build/commonjs/mtcnn/loadQuantizedParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadQuantizedParams.js","sourceRoot":"","sources":["../../../src/mtcnn/loadQuantizedParams.ts"],"names":[],"mappings":"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"} \ 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 64982e36..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,mBAA0B,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 78499e69..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,eAA2C,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 a076ebd9..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,qBAA4B,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 4fbda0e7..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_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); -var prelu_1 = require("./prelu"); -function sharedLayer(x, params, isPnet) { - if (isPnet === void 0) { isPnet = false; } - return tf.tidy(function () { - var out = tfjs_tiny_yolov2_1.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_tiny_yolov2_1.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_tiny_yolov2_1.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 fb748296..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,qDAA6C;AAE7C,iCAAgC;AAGhC,qBAA4B,CAAc,EAAE,MAAoB,EAAE,MAAuB;IAAvB,uBAAA,EAAA,cAAuB;IACvF,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,4BAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC7C,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,4BAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC3C,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,4BAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC3C,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 14ad0297..00000000 --- a/build/commonjs/mtcnn/stage1.js +++ /dev/null @@ -1,94 +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 = []; - for (var y = 0; y < scoresTensor.shape[0]; y++) { - for (var x = 0; x < scoresTensor.shape[1]; x++) { - if (scoresTensor.get(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 = scoresTensor.get(idx.y, idx.x); - var region = new MtcnnBox_1.MtcnnBox(regionsTensor.get(idx.y, idx.x, 0), regionsTensor.get(idx.y, idx.x, 1), regionsTensor.get(idx.y, idx.x, 2), regionsTensor.get(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 48a2e6a5..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 72375ab1..00000000 --- a/build/commonjs/mtcnn/stage2.js +++ /dev/null @@ -1,69 +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) { - return new MtcnnBox_1.MtcnnBox(rnetOuts[indices[idx]].regions.get(0, 0), rnetOuts[indices[idx]].regions.get(0, 1), rnetOuts[indices[idx]].regions.get(0, 2), rnetOuts[indices[idx]].regions.get(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 d2a8b464..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 09dd0b17..00000000 --- a/build/commonjs/mtcnn/stage3.js +++ /dev/null @@ -1,76 +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) { return new MtcnnBox_1.MtcnnBox(onetOuts[idx].regions.get(0, 0), onetOuts[idx].regions.get(0, 1), onetOuts[idx].regions.get(0, 2), onetOuts[idx].regions.get(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) { - return new tfjs_image_recognition_base_1.Point(((onetOuts[idx].points.get(0, ptIdx) * (finalBoxes[i].width + 1)) + finalBoxes[i].left), ((onetOuts[idx].points.get(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 a01f3aaa..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":"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"} \ 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 fc2b533d..00000000 --- a/build/commonjs/mtcnn/types.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ConvParams, FCParams } from 'tfjs-tiny-yolov2'; -export declare type SharedParams = { - conv1: ConvParams; - prelu1_alpha: tf.Tensor1D; - conv2: ConvParams; - prelu2_alpha: tf.Tensor1D; - conv3: ConvParams; - prelu3_alpha: tf.Tensor1D; -}; -export declare type PNetParams = SharedParams & { - conv4_1: ConvParams; - conv4_2: ConvParams; -}; -export declare type RNetParams = SharedParams & { - fc1: FCParams; - prelu4_alpha: tf.Tensor1D; - fc2_1: FCParams; - fc2_2: FCParams; -}; -export declare type ONetParams = SharedParams & { - conv4: ConvParams; - prelu4_alpha: tf.Tensor1D; - fc1: FCParams; - prelu5_alpha: tf.Tensor1D; - fc2_1: FCParams; - fc2_2: FCParams; - fc2_3: FCParams; -}; -export declare type NetParams = { - pnet: PNetParams; - rnet: RNetParams; - onet: ONetParams; -}; 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/ssdMobilenetv1/SsdMobilenetv1.d.ts b/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.d.ts deleted file mode 100644 index 3749d1c0..00000000 --- a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.d.ts +++ /dev/null @@ -1,31 +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 loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }>; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }; -} diff --git a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.js b/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.js deleted file mode 100644 index 3de963fc..00000000 --- a/build/commonjs/ssdMobilenetv1/SsdMobilenetv1.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 tfjs_image_recognition_base_1 = require("tfjs-image-recognition-base"); -var FaceDetection_1 = require("../classes/FaceDetection"); -var extractParams_1 = require("./extractParams"); -var loadQuantizedParams_1 = require("./loadQuantizedParams"); -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, 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; - results = indices - .map(function (idx) { - var _a = [ - Math.max(0, boxes.get(idx, 0)), - Math.min(1.0, boxes.get(idx, 2)) - ].map(function (val) { return val * padY; }), top = _a[0], bottom = _a[1]; - var _b = [ - Math.max(0, boxes.get(idx, 1)), - Math.min(1.0, boxes.get(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.loadQuantizedParams = function (uri) { - return loadQuantizedParams_1.loadQuantizedParams(uri); - }; - 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 08cf470e..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":";;;AAAA,0CAA4C;AAC5C,2EAAmG;AAEnG,0DAAyD;AACzD,iDAAgD;AAChD,6DAA4D;AAC5D,6CAA4C;AAC5C,yDAAwD;AACxD,6CAA4C;AAC5C,qDAAoD;AACpD,iEAAwF;AAIxF;IAAoC,0CAAwB;IAE1D;eACE,kBAAM,gBAAgB,CAAC;IACzB,CAAC;IAEM,qCAAY,GAAnB,UAAoB,KAAe;QAEzB,IAAA,oBAAM,CAAS;QAEvB,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;SAChE;QAED,OAAO,EAAE,CAAC,IAAI,CAAC;YACb,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAA;YAE7D,IAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAgB,CAAA;YACnG,IAAM,QAAQ,GAAG,yBAAW,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;YAE7C,IAAA,8FAGqE,EAFzE,kCAAc,EACd,sCAAgB,CACyD;YAE3E,OAAO,yBAAW,CAAC,cAAc,EAAE,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAC3E,CAAC,CAAC,CAAA;IACJ,CAAC;IAEY,gCAAO,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,oCAAW,GAAxB,UACE,KAAgB,EAChB,OAAoC;QAApC,wBAAA,EAAA,YAAoC;;;;;;wBAG9B,KAAgC,IAAI,6CAAqB,CAAC,OAAO,CAAC,EAAhE,UAAU,gBAAA,EAAE,aAAa,mBAAA,CAAuC;wBAEvD,qBAAM,wCAAU,CAAC,KAAK,CAAC,EAAA;;wBAAlC,QAAQ,GAAG,SAAuB;wBAElC,KAGF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAFtB,MAAM,WAAA,EACL,OAAO,YAAA,CACc;wBAIzB,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;wBACjB,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;wBACzB,KAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BACtC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;4BACnB,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;yBACrB;wBAGkB,KAAA,CAAA,KAAA,KAAK,CAAA,CAAC,IAAI,CAAA;wBAAC,qBAAM,MAAM,CAAC,IAAI,EAAE,EAAA;;wBAA3C,UAAU,GAAG,cAAW,SAAmB,EAAC;wBAE5C,YAAY,GAAG,GAAG,CAAA;wBAClB,OAAO,GAAG,qCAAiB,CAC/B,KAAK,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,aAAa,CACd,CAAA;wBAEK,YAAY,GAAG,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAA;wBACrD,SAAS,GAAG,QAAQ,CAAC,SAAmB,CAAA;wBACxC,IAAI,GAAG,SAAS,GAAG,YAAY,CAAC,KAAK,CAAA;wBACrC,IAAI,GAAG,SAAS,GAAG,YAAY,CAAC,MAAM,CAAA;wBAEtC,OAAO,GAAG,OAAO;6BACpB,GAAG,CAAC,UAAA,GAAG;4BACA,IAAA;;;wEAGkB,EAHjB,WAAG,EAAE,cAAM,CAGM;4BAClB,IAAA;;;wEAGkB,EAHjB,YAAI,EAAE,aAAK,CAGM;4BACxB,OAAO,IAAI,6BAAa,CACtB,UAAU,CAAC,GAAG,CAAC,EACf,IAAI,kCAAI,CACN,IAAI,EACJ,GAAG,EACH,KAAK,GAAG,IAAI,EACZ,MAAM,GAAG,GAAG,CACb,EACD;gCACE,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;gCAClC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;6BACjC,CACF,CAAA;wBACH,CAAC,CAAC,CAAA;wBAEJ,KAAK,CAAC,OAAO,EAAE,CAAA;wBACf,MAAM,CAAC,OAAO,EAAE,CAAA;wBAEhB,sBAAO,OAAO,EAAA;;;;KACf;IAES,4CAAmB,GAA7B,UAA8B,GAAuB;QACnD,OAAO,yCAAmB,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IAES,sCAAa,GAAvB,UAAwB,OAAqB;QAC3C,OAAO,6BAAa,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;IACH,qBAAC;AAAD,CAAC,AA/GD,CAAoC,2CAAa,GA+GhD;AA/GY,wCAAc"} \ 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 3f710f3e..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 f5acb02e..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_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); -function boxPredictionLayer(x, params) { - return tf.tidy(function () { - var batchSize = x.shape[0]; - var boxPredictionEncoding = tf.reshape(tfjs_tiny_yolov2_1.convLayer(x, params.box_encoding_predictor), [batchSize, -1, 1, 4]); - var classPrediction = tf.reshape(tfjs_tiny_yolov2_1.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 fade629a..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,qDAA6C;AAK7C,4BACE,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,4BAAS,CAAC,CAAC,EAAE,MAAM,CAAC,sBAAsB,CAAC,EAC3C,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACtB,CAAA;QACD,IAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAChC,4BAAS,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,EACpC,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 40295777..00000000 --- a/build/commonjs/ssdMobilenetv1/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: ParamMapping[]; -}; diff --git a/build/commonjs/ssdMobilenetv1/extractParams.js b/build/commonjs/ssdMobilenetv1/extractParams.js deleted file mode 100644 index ccf07792..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.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 efe0dc2f..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/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 0f5967d0..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,8BAAqC,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,gCAAuC,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/loadQuantizedParams.d.ts b/build/commonjs/ssdMobilenetv1/loadQuantizedParams.d.ts deleted file mode 100644 index c5e1dc44..00000000 --- a/build/commonjs/ssdMobilenetv1/loadQuantizedParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: ParamMapping[]; -}>; diff --git a/build/commonjs/ssdMobilenetv1/loadQuantizedParams.js b/build/commonjs/ssdMobilenetv1/loadQuantizedParams.js deleted file mode 100644 index c16b7d7e..00000000 --- a/build/commonjs/ssdMobilenetv1/loadQuantizedParams.js +++ /dev/null @@ -1,114 +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 DEFAULT_MODEL_NAME = 'ssd_mobilenetv1_model'; -function extractorsFactory(weightMap, paramMappings) { - var extractWeightEntry = tfjs_image_recognition_base_1.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 loadQuantizedParams(uri) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var weightMap, paramMappings, _a, extractMobilenetV1Params, extractPredictionLayerParams, extra_dim, params; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, tfjs_image_recognition_base_1.loadWeightMap(uri, DEFAULT_MODEL_NAME)]; - case 1: - weightMap = _b.sent(); - paramMappings = []; - _a = extractorsFactory(weightMap, paramMappings), extractMobilenetV1Params = _a.extractMobilenetV1Params, extractPredictionLayerParams = _a.extractPredictionLayerParams; - 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); - } - params = { - mobilenetv1: extractMobilenetV1Params(), - prediction_layer: extractPredictionLayerParams(), - output_layer: { - extra_dim: extra_dim - } - }; - tfjs_image_recognition_base_1.disposeUnusedWeightTensors(weightMap, paramMappings); - return [2 /*return*/, { params: params, paramMappings: paramMappings }]; - } - }); - }); -} -exports.loadQuantizedParams = loadQuantizedParams; -//# sourceMappingURL=loadQuantizedParams.js.map \ No newline at end of file diff --git a/build/commonjs/ssdMobilenetv1/loadQuantizedParams.js.map b/build/commonjs/ssdMobilenetv1/loadQuantizedParams.js.map deleted file mode 100644 index a5fc6295..00000000 --- a/build/commonjs/ssdMobilenetv1/loadQuantizedParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadQuantizedParams.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/loadQuantizedParams.ts"],"names":[],"mappings":"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"} \ 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 e73ca54e..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.batchNormalization(out, params.batch_norm_mean, params.batch_norm_variance, epsilon, params.batch_norm_scale, params.batch_norm_offset); - 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 fdfc137f..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,4BACE,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,kBAAkB,CACzB,GAAG,EACH,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,mBAAmB,EAC1B,OAAO,EACP,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,iBAAiB,CACzB,CAAA;QACD,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAElC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,+BAA+B,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,qBAA4B,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 65e75e87..00000000 --- a/build/commonjs/ssdMobilenetv1/nonMaxSuppression.js +++ /dev/null @@ -1,56 +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 yminI = Math.min(boxes.get(i, 0), boxes.get(i, 2)); - var xminI = Math.min(boxes.get(i, 1), boxes.get(i, 3)); - var ymaxI = Math.max(boxes.get(i, 0), boxes.get(i, 2)); - var xmaxI = Math.max(boxes.get(i, 1), boxes.get(i, 3)); - var yminJ = Math.min(boxes.get(j, 0), boxes.get(j, 2)); - var xminJ = Math.min(boxes.get(j, 1), boxes.get(j, 3)); - var ymaxJ = Math.max(boxes.get(j, 0), boxes.get(j, 2)); - var xmaxJ = Math.max(boxes.get(j, 1), boxes.get(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 f8feb673..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":";;AAEA,2BACE,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;AA9CD,8CA8CC;AAED,aAAa,KAAkB,EAAE,CAAS,EAAE,CAAS;IACnD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,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/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 ae2c073a..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 55600cf1..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,4BACE,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 3c955862..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,yBACE,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 f0eed191..00000000 --- a/build/commonjs/ssdMobilenetv1/types.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ConvParams } from 'tfjs-tiny-yolov2'; -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: ConvParams; - class_predictor: 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 36b07c85..00000000 --- a/build/commonjs/tinyFaceDetector/TinyFaceDetector.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Point, TNetInput } from 'tfjs-image-recognition-base'; -import { TinyYolov2 as TinyYolov2Base, ITinyYolov2Options } from 'tfjs-tiny-yolov2'; -import { FaceDetection } from '../classes'; -export declare class TinyFaceDetector extends TinyYolov2Base { - constructor(); - readonly anchors: Point[]; - locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise; - protected loadQuantizedParams(modelUri: string | undefined): any; -} diff --git a/build/commonjs/tinyFaceDetector/TinyFaceDetector.js b/build/commonjs/tinyFaceDetector/TinyFaceDetector.js deleted file mode 100644 index 8500a8f8..00000000 --- a/build/commonjs/tinyFaceDetector/TinyFaceDetector.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); -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.loadQuantizedParams = function (modelUri) { - var defaultModelName = const_1.DEFAULT_MODEL_NAME; - return _super.prototype.loadQuantizedParams.call(this, modelUri, defaultModelName); - }; - return TinyFaceDetector; -}(tfjs_tiny_yolov2_1.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 a0cb4153..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,qDAAoF;AAEpF,sCAA2C;AAC3C,iCAAmF;AAEnF;IAAsC,4CAAc;IAElD;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,aAAiC;;;;;4BACjD,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,UAA8B,QAA4B;QACxD,IAAM,gBAAgB,GAAG,0BAAkB,CAAA;QAC3C,OAAO,iBAAM,mBAAmB,YAAC,QAAQ,EAAE,gBAAgB,CAAQ,CAAA;IACrE,CAAC;IACH,uBAAC;AAAD,CAAC,AA7BD,CAAsC,6BAAc,GA6BnD;AA7BY,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 65d5d654..00000000 --- a/build/commonjs/tinyFaceDetector/TinyFaceDetectorOptions.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ITinyYolov2Options, TinyYolov2Options } from 'tfjs-tiny-yolov2'; -export interface ITinyFaceDetectorOptions extends ITinyYolov2Options { -} -export declare class TinyFaceDetectorOptions extends TinyYolov2Options { - protected _name: string; -} diff --git a/build/commonjs/tinyFaceDetector/TinyFaceDetectorOptions.js b/build/commonjs/tinyFaceDetector/TinyFaceDetectorOptions.js deleted file mode 100644 index 747782ec..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_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); -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_tiny_yolov2_1.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 4471f43d..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,qDAAyE;AAIzE;IAA6C,mDAAiB;IAA9D;QAAA,qEAEC;QADW,WAAK,GAAW,yBAAyB,CAAA;;IACrD,CAAC;IAAD,8BAAC;AAAD,CAAC,AAFD,CAA6C,oCAAiB,GAE7D;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 85ee0383..00000000 --- a/build/commonjs/tinyFaceDetector/const.d.ts +++ /dev/null @@ -1,5 +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]; -export declare const DEFAULT_MODEL_NAME = "tiny_face_detector_model"; diff --git a/build/commonjs/tinyFaceDetector/const.js b/build/commonjs/tinyFaceDetector/const.js deleted file mode 100644 index 4b7f2a23..00000000 --- a/build/commonjs/tinyFaceDetector/const.js +++ /dev/null @@ -1,14 +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]; -exports.DEFAULT_MODEL_NAME = 'tiny_face_detector_model'; -//# 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 e29ca0ed..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;AAE/D,QAAA,kBAAkB,GAAG,0BAA0B,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 838f2352..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,gCAAuC,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 28161b6f..00000000 --- a/build/commonjs/tinyYolov2/TinyYolov2.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Point, TNetInput } from 'tfjs-image-recognition-base'; -import { ITinyYolov2Options, TinyYolov2 as TinyYolov2Base } from 'tfjs-tiny-yolov2'; -import { FaceDetection } from '../classes'; -export declare class TinyYolov2 extends TinyYolov2Base { - constructor(withSeparableConvs?: boolean); - readonly withSeparableConvs: boolean; - readonly anchors: Point[]; - locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise; - protected loadQuantizedParams(modelUri: string | undefined): any; -} diff --git a/build/commonjs/tinyYolov2/TinyYolov2.js b/build/commonjs/tinyYolov2/TinyYolov2.js deleted file mode 100644 index d0ffa925..00000000 --- a/build/commonjs/tinyYolov2/TinyYolov2.js +++ /dev/null @@ -1,62 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var tfjs_tiny_yolov2_1 = require("tfjs-tiny-yolov2"); -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.loadQuantizedParams = function (modelUri) { - var defaultModelName = this.withSeparableConvs ? const_1.DEFAULT_MODEL_NAME_SEPARABLE_CONV : const_1.DEFAULT_MODEL_NAME; - return _super.prototype.loadQuantizedParams.call(this, modelUri, defaultModelName); - }; - return TinyYolov2; -}(tfjs_tiny_yolov2_1.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 04658500..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,qDAAoF;AAEpF,sCAA2C;AAC3C,iCAOiB;AAEjB;IAAgC,sCAAc;IAE5C,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,aAAiC;;;;;4BACjD,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,UAA8B,QAA4B;QACxD,IAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,yCAAiC,CAAC,CAAC,CAAC,0BAAkB,CAAA;QACzG,OAAO,iBAAM,mBAAmB,YAAC,QAAQ,EAAE,gBAAgB,CAAQ,CAAA;IACrE,CAAC;IACH,iBAAC;AAAD,CAAC,AAvCD,CAAgC,6BAAc,GAuC7C;AAvCY,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 37d04441..00000000 --- a/build/commonjs/tinyYolov2/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { TinyYolov2 } from './TinyYolov2'; -export * from './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 2a274368..00000000 --- a/build/commonjs/tinyYolov2/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tslib_1 = require("tslib"); -var TinyYolov2_1 = require("./TinyYolov2"); -tslib_1.__exportStar(require("./TinyYolov2"), exports); -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 df76e267..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;AAE1C,uDAA6B;AAE7B,0BAAiC,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 b542db89..00000000 --- a/build/es6/classes/FaceDetection.d.ts +++ /dev/null @@ -1,8 +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); -} diff --git a/build/es6/classes/FaceDetection.js b/build/es6/classes/FaceDetection.js deleted file mode 100644 index c29c916d..00000000 --- a/build/es6/classes/FaceDetection.js +++ /dev/null @@ -1,11 +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; - } - 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 a93c6517..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;IACH,oBAAC;AAAD,CAAC,AARD,CAAmC,eAAe,GAQjD"} \ No newline at end of file diff --git a/build/es6/classes/FaceDetectionWithLandmarks.d.ts b/build/es6/classes/FaceDetectionWithLandmarks.d.ts deleted file mode 100644 index ed2ac7d5..00000000 --- a/build/es6/classes/FaceDetectionWithLandmarks.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { FaceDetection } from './FaceDetection'; -import { FaceLandmarks } from './FaceLandmarks'; -import { FaceLandmarks68 } from './FaceLandmarks68'; -export interface IFaceDetectionWithLandmarks { - detection: FaceDetection; - landmarks: TFaceLandmarks; -} -export declare class FaceDetectionWithLandmarks implements IFaceDetectionWithLandmarks { - private _detection; - private _unshiftedLandmarks; - constructor(detection: FaceDetection, unshiftedLandmarks: TFaceLandmarks); - readonly detection: FaceDetection; - readonly unshiftedLandmarks: TFaceLandmarks; - readonly alignedRect: FaceDetection; - readonly landmarks: TFaceLandmarks; - readonly faceDetection: FaceDetection; - readonly faceLandmarks: TFaceLandmarks; - forSize(width: number, height: number): FaceDetectionWithLandmarks; -} diff --git a/build/es6/classes/FaceDetectionWithLandmarks.js b/build/es6/classes/FaceDetectionWithLandmarks.js deleted file mode 100644 index 4acf586b..00000000 --- a/build/es6/classes/FaceDetectionWithLandmarks.js +++ /dev/null @@ -1,53 +0,0 @@ -import { FaceDetection } from './FaceDetection'; -var FaceDetectionWithLandmarks = /** @class */ (function () { - function FaceDetectionWithLandmarks(detection, unshiftedLandmarks) { - this._detection = detection; - this._unshiftedLandmarks = unshiftedLandmarks; - } - Object.defineProperty(FaceDetectionWithLandmarks.prototype, "detection", { - get: function () { return this._detection; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceDetectionWithLandmarks.prototype, "unshiftedLandmarks", { - get: function () { return this._unshiftedLandmarks; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceDetectionWithLandmarks.prototype, "alignedRect", { - get: function () { - var rect = this.landmarks.align(); - var imageDims = this.detection.imageDims; - return new FaceDetection(this._detection.score, rect.rescale(imageDims.reverse()), imageDims); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceDetectionWithLandmarks.prototype, "landmarks", { - get: function () { - var _a = this.detection.box, x = _a.x, y = _a.y; - return this._unshiftedLandmarks.shiftBy(x, y); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceDetectionWithLandmarks.prototype, "faceDetection", { - // aliases for backward compatibily - get: function () { return this.detection; }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FaceDetectionWithLandmarks.prototype, "faceLandmarks", { - get: function () { return this.landmarks; }, - enumerable: true, - configurable: true - }); - FaceDetectionWithLandmarks.prototype.forSize = function (width, height) { - var resizedDetection = this._detection.forSize(width, height); - var resizedLandmarks = this._unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height); - return new FaceDetectionWithLandmarks(resizedDetection, resizedLandmarks); - }; - return FaceDetectionWithLandmarks; -}()); -export { FaceDetectionWithLandmarks }; -//# sourceMappingURL=FaceDetectionWithLandmarks.js.map \ No newline at end of file diff --git a/build/es6/classes/FaceDetectionWithLandmarks.js.map b/build/es6/classes/FaceDetectionWithLandmarks.js.map deleted file mode 100644 index aa4d4797..00000000 --- a/build/es6/classes/FaceDetectionWithLandmarks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FaceDetectionWithLandmarks.js","sourceRoot":"","sources":["../../../src/classes/FaceDetectionWithLandmarks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAShD;IAME,oCACE,SAAwB,EACxB,kBAAkC;QAElC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;QAC3B,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAA;IAC/C,CAAC;IAED,sBAAW,iDAAS;aAApB,cAAwC,OAAO,IAAI,CAAC,UAAU,CAAA,CAAC,CAAC;;;OAAA;IAChE,sBAAW,0DAAkB;aAA7B,cAAkD,OAAO,IAAI,CAAC,mBAAmB,CAAA,CAAC,CAAC;;;OAAA;IAEnF,sBAAW,mDAAW;aAAtB;YACE,IAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;YAC3B,IAAA,oCAAS,CAAmB;YACpC,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;QAC/F,CAAC;;;OAAA;IAED,sBAAW,iDAAS;aAApB;YACQ,IAAA,uBAA6B,EAA3B,QAAC,EAAE,QAAC,CAAuB;YACnC,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC/C,CAAC;;;OAAA;IAGD,sBAAI,qDAAa;QADjB,mCAAmC;aACnC,cAAqC,OAAO,IAAI,CAAC,SAAS,CAAA,CAAC,CAAC;;;OAAA;IAC5D,sBAAI,qDAAa;aAAjB,cAAsC,OAAO,IAAI,CAAC,SAAS,CAAA,CAAC,CAAC;;;OAAA;IAEtD,4CAAO,GAAd,UAAe,KAAa,EAAE,MAAc;QAC1C,IAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC/D,IAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAiB,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAClI,OAAO,IAAI,0BAA0B,CAAiB,gBAAgB,EAAE,gBAAgB,CAAC,CAAA;IAC3F,CAAC;IACH,iCAAC;AAAD,CAAC,AArCD,IAqCC"} \ 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/FullFaceDescription.d.ts b/build/es6/classes/FullFaceDescription.d.ts deleted file mode 100644 index 88ec647d..00000000 --- a/build/es6/classes/FullFaceDescription.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { FaceDetection } from './FaceDetection'; -import { FaceDetectionWithLandmarks, IFaceDetectionWithLandmarks } from './FaceDetectionWithLandmarks'; -import { FaceLandmarks } from './FaceLandmarks'; -import { FaceLandmarks68 } from './FaceLandmarks68'; -export interface IFullFaceDescription extends IFaceDetectionWithLandmarks { - detection: FaceDetection; - landmarks: TFaceLandmarks; - descriptor: Float32Array; -} -export declare class FullFaceDescription extends FaceDetectionWithLandmarks implements IFullFaceDescription { - private _descriptor; - constructor(detection: FaceDetection, unshiftedLandmarks: TFaceLandmarks, descriptor: Float32Array); - readonly descriptor: Float32Array; - forSize(width: number, height: number): FullFaceDescription; -} diff --git a/build/es6/classes/FullFaceDescription.js b/build/es6/classes/FullFaceDescription.js deleted file mode 100644 index eb0c8d4a..00000000 --- a/build/es6/classes/FullFaceDescription.js +++ /dev/null @@ -1,24 +0,0 @@ -import * as tslib_1 from "tslib"; -import { FaceDetectionWithLandmarks } from './FaceDetectionWithLandmarks'; -var FullFaceDescription = /** @class */ (function (_super) { - tslib_1.__extends(FullFaceDescription, _super); - function FullFaceDescription(detection, unshiftedLandmarks, descriptor) { - var _this = _super.call(this, detection, unshiftedLandmarks) || this; - _this._descriptor = descriptor; - return _this; - } - Object.defineProperty(FullFaceDescription.prototype, "descriptor", { - get: function () { - return this._descriptor; - }, - enumerable: true, - configurable: true - }); - FullFaceDescription.prototype.forSize = function (width, height) { - var _a = _super.prototype.forSize.call(this, width, height), detection = _a.detection, landmarks = _a.landmarks; - return new FullFaceDescription(detection, landmarks, this.descriptor); - }; - return FullFaceDescription; -}(FaceDetectionWithLandmarks)); -export { FullFaceDescription }; -//# sourceMappingURL=FullFaceDescription.js.map \ No newline at end of file diff --git a/build/es6/classes/FullFaceDescription.js.map b/build/es6/classes/FullFaceDescription.js.map deleted file mode 100644 index 962a232a..00000000 --- a/build/es6/classes/FullFaceDescription.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FullFaceDescription.js","sourceRoot":"","sources":["../../../src/classes/FullFaceDescription.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,0BAA0B,EAA+B,MAAM,8BAA8B,CAAC;AAYvG;IACU,+CAA0C;IAKlD,6BACE,SAAwB,EACxB,kBAAkC,EAClC,UAAwB;QAH1B,YAKE,kBAAM,SAAS,EAAE,kBAAkB,CAAC,SAErC;QADC,KAAI,CAAC,WAAW,GAAG,UAAU,CAAA;;IAC/B,CAAC;IAED,sBAAW,2CAAU;aAArB;YACE,OAAO,IAAI,CAAC,WAAW,CAAA;QACzB,CAAC;;;OAAA;IAEM,qCAAO,GAAd,UAAe,KAAa,EAAE,MAAc;QACpC,IAAA,uDAAuD,EAArD,wBAAS,EAAE,wBAAS,CAAiC;QAC7D,OAAO,IAAI,mBAAmB,CAAiB,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IACvF,CAAC;IACH,0BAAC;AAAD,CAAC,AAvBD,CACU,0BAA0B,GAsBnC"} \ 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 e19eaaa8..00000000 --- a/build/es6/classes/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from './FaceDetection'; -export * from './FaceDetectionWithLandmarks'; -export * from './FaceLandmarks'; -export * from './FaceLandmarks5'; -export * from './FaceLandmarks68'; -export * from './FaceMatch'; -export * from './FullFaceDescription'; -export * from './LabeledFaceDescriptors'; diff --git a/build/es6/classes/index.js b/build/es6/classes/index.js deleted file mode 100644 index 050b12c5..00000000 --- a/build/es6/classes/index.js +++ /dev/null @@ -1,9 +0,0 @@ -export * from './FaceDetection'; -export * from './FaceDetectionWithLandmarks'; -export * from './FaceLandmarks'; -export * from './FaceLandmarks5'; -export * from './FaceLandmarks68'; -export * from './FaceMatch'; -export * from './FullFaceDescription'; -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 c23e51e3..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,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,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 6f18fd5b..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,sBACJ,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/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 f7697976..00000000 --- a/build/es6/dom/drawLandmarks.js +++ /dev/null @@ -1,33 +0,0 @@ -import { 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 HTMLCanvasElement)) { - 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 5d0bd4fc..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,mBAAmB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGvG,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,wBACJ,SAAqC,EACrC,aAA8C,EAC9C,OAA8B;IAE9B,IAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,CAAC,CAAC,MAAM,YAAY,iBAAiB,CAAC,EAAE;QAC1C,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 90fc304d..00000000 --- a/build/es6/dom/extractFaceTensors.js +++ /dev/null @@ -1,36 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { isTensor4D } 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 (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 8c24befb..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,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,6BACJ,WAAsC,EACtC,UAAuC;;;YAGvC,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,mBAAW,CAA4D;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 2dab2cb9..00000000 --- a/build/es6/dom/extractFaces.js +++ /dev/null @@ -1,53 +0,0 @@ -import * as tslib_1 from "tslib"; -import { createCanvas, 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, netInput, tensorOrCanvas, _a, ctx, boxes; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: - canvas = input; - if (!!(input instanceof HTMLCanvasElement)) 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 HTMLCanvasElement)) 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 4e260a14..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,mBAAmB,EACnB,mBAAmB,EAGnB,UAAU,GACX,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,uBACJ,KAAgB,EAChB,UAAuC;;;;;;oBAGnC,MAAM,GAAG,KAA0B,CAAA;yBAEnC,CAAC,CAAC,KAAK,YAAY,iBAAiB,CAAC,EAArC,wBAAqC;oBACtB,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,iBAAiB,CAAA,EAA3C,wBAA2C;oBAChD,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 2fdbb244..00000000 --- a/build/es6/dom/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './drawContour'; -export * from './drawLandmarks'; -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 b137d709..00000000 --- a/build/es6/dom/index.js +++ /dev/null @@ -1,5 +0,0 @@ -export * from './drawContour'; -export * from './drawLandmarks'; -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 9339c121..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,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 cd664596..00000000 --- a/build/es6/dom/types.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare type DrawLandmarksOptions = { - lineWidth?: number; - color?: string; - drawLines?: boolean; -}; 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 9ed4368e..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,4BAA4B,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/faceLandmarkNet/FaceLandmark68Net.d.ts b/build/es6/faceLandmarkNet/FaceLandmark68Net.d.ts deleted file mode 100644 index 93d5106a..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68Net.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput } from 'tfjs-image-recognition-base'; -import { FaceLandmark68NetBase } from './FaceLandmark68NetBase'; -import { NetParams } from './types'; -export declare class FaceLandmark68Net extends FaceLandmark68NetBase { - constructor(); - runNet(input: NetInput): tf.Tensor2D; - protected loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }>; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }; -} diff --git a/build/es6/faceLandmarkNet/FaceLandmark68Net.js b/build/es6/faceLandmarkNet/FaceLandmark68Net.js deleted file mode 100644 index 1531043f..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68Net.js +++ /dev/null @@ -1,54 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { normalize } from 'tfjs-image-recognition-base'; -import { depthwiseSeparableConv } from './depthwiseSeparableConv'; -import { extractParams } from './extractParams'; -import { FaceLandmark68NetBase } from './FaceLandmark68NetBase'; -import { fullyConnectedLayer } from './fullyConnectedLayer'; -import { loadQuantizedParams } from './loadQuantizedParams'; -function denseBlock(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]); - 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)))); - }); -} -var FaceLandmark68Net = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmark68Net, _super); - function FaceLandmark68Net() { - return _super.call(this, 'FaceLandmark68Net') || this; - } - FaceLandmark68Net.prototype.runNet = function (input) { - var params = this.params; - if (!params) { - throw new Error('FaceLandmark68Net - 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 = denseBlock(normalized, params.dense0, true); - out = denseBlock(out, params.dense1); - out = denseBlock(out, params.dense2); - out = denseBlock(out, params.dense3); - out = tf.avgPool(out, [7, 7], [2, 2], 'valid'); - return fullyConnectedLayer(out.as2D(out.shape[0], -1), params.fc); - }); - }; - FaceLandmark68Net.prototype.loadQuantizedParams = function (uri) { - return loadQuantizedParams(uri); - }; - FaceLandmark68Net.prototype.extractParams = function (weights) { - return extractParams(weights); - }; - 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 7c9f31d5..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":"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"} \ 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 8ec0dad9..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68NetBase.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { IDimensions, NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -export declare class FaceLandmark68NetBase extends NeuralNetwork { - private __name; - constructor(_name: string); - runNet(_: NetInput): tf.Tensor2D; - postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D; - forwardInput(input: NetInput): tf.Tensor2D; - forward(input: TNetInput): Promise; - detectLandmarks(input: TNetInput): Promise; -} diff --git a/build/es6/faceLandmarkNet/FaceLandmark68NetBase.js b/build/es6/faceLandmarkNet/FaceLandmark68NetBase.js deleted file mode 100644 index 0673c63c..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68NetBase.js +++ /dev/null @@ -1,113 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { isEven, NeuralNetwork, Point, toNetInput } from 'tfjs-image-recognition-base'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -var FaceLandmark68NetBase = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmark68NetBase, _super); - function FaceLandmark68NetBase(_name) { - var _this = _super.call(this, _name) || this; - _this.__name = _name; - return _this; - } - FaceLandmark68NetBase.prototype.runNet = function (_) { - throw new Error(this.__name + " - runNet not implemented"); - }; - 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 _this = this; - var netInput, landmarkTensors, landmarksForBatch; - 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]]; - } - }); - }); - }; - return FaceLandmark68NetBase; -}(NeuralNetwork)); -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 09a59310..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 774b1109..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { NetInput } from 'tfjs-image-recognition-base'; -import { FaceLandmark68NetBase } from './FaceLandmark68NetBase'; -import { TinyNetParams } from './types'; -export declare class FaceLandmark68TinyNet extends FaceLandmark68NetBase { - constructor(); - runNet(input: NetInput): tf.Tensor2D; - protected loadQuantizedParams(uri: string | undefined): Promise<{ - params: TinyNetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }>; - protected extractParams(weights: Float32Array): { - params: TinyNetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }; -} diff --git a/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.js b/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.js deleted file mode 100644 index 32b07bae..00000000 --- a/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.js +++ /dev/null @@ -1,51 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { normalize } from 'tfjs-image-recognition-base'; -import { depthwiseSeparableConv } from './depthwiseSeparableConv'; -import { extractParamsTiny } from './extractParamsTiny'; -import { FaceLandmark68NetBase } from './FaceLandmark68NetBase'; -import { fullyConnectedLayer } from './fullyConnectedLayer'; -import { loadQuantizedParamsTiny } from './loadQuantizedParamsTiny'; -function denseBlock(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))); - }); -} -var FaceLandmark68TinyNet = /** @class */ (function (_super) { - tslib_1.__extends(FaceLandmark68TinyNet, _super); - function FaceLandmark68TinyNet() { - return _super.call(this, 'FaceLandmark68TinyNet') || this; - } - FaceLandmark68TinyNet.prototype.runNet = function (input) { - var params = this.params; - if (!params) { - throw new Error('FaceLandmark68TinyNet - 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 = denseBlock(normalized, params.dense0, true); - out = denseBlock(out, params.dense1); - out = denseBlock(out, params.dense2); - out = tf.avgPool(out, [14, 14], [2, 2], 'valid'); - return fullyConnectedLayer(out.as2D(out.shape[0], -1), params.fc); - }); - }; - FaceLandmark68TinyNet.prototype.loadQuantizedParams = function (uri) { - return loadQuantizedParamsTiny(uri); - }; - FaceLandmark68TinyNet.prototype.extractParams = function (weights) { - return extractParamsTiny(weights); - }; - 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 3fce06b7..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":"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"} \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/depthwiseSeparableConv.d.ts b/build/es6/faceLandmarkNet/depthwiseSeparableConv.d.ts deleted file mode 100644 index 3e11ba95..00000000 --- a/build/es6/faceLandmarkNet/depthwiseSeparableConv.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { SeparableConvParams } from 'tfjs-tiny-yolov2'; -export declare function depthwiseSeparableConv(x: tf.Tensor4D, params: SeparableConvParams, stride: [number, number]): tf.Tensor4D; diff --git a/build/es6/faceLandmarkNet/depthwiseSeparableConv.js b/build/es6/faceLandmarkNet/depthwiseSeparableConv.js deleted file mode 100644 index 7c8669d2..00000000 --- a/build/es6/faceLandmarkNet/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/faceLandmarkNet/depthwiseSeparableConv.js.map b/build/es6/faceLandmarkNet/depthwiseSeparableConv.js.map deleted file mode 100644 index 009a1e40..00000000 --- a/build/es6/faceLandmarkNet/depthwiseSeparableConv.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"depthwiseSeparableConv.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/depthwiseSeparableConv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG5C,MAAM,iCACJ,CAAc,EACd,MAA2B,EAC3B,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/faceLandmarkNet/extractParams.d.ts b/build/es6/faceLandmarkNet/extractParams.d.ts deleted file mode 100644 index 40295777..00000000 --- a/build/es6/faceLandmarkNet/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: ParamMapping[]; -}; diff --git a/build/es6/faceLandmarkNet/extractParams.js b/build/es6/faceLandmarkNet/extractParams.js deleted file mode 100644 index a6b9a778..00000000 --- a/build/es6/faceLandmarkNet/extractParams.js +++ /dev/null @@ -1,20 +0,0 @@ -import { extractWeightsFactory } from 'tfjs-image-recognition-base'; -import { extractorsFactory } from './extractorsFactory'; -export function extractParams(weights) { - var paramMappings = []; - var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var _b = extractorsFactory(extractWeights, paramMappings), extractDenseBlock4Params = _b.extractDenseBlock4Params, extractFCParams = _b.extractFCParams; - 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'); - var fc = extractFCParams(256, 136, 'fc'); - 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, fc: fc } - }; -} -//# sourceMappingURL=extractParams.js.map \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/extractParams.js.map b/build/es6/faceLandmarkNet/extractParams.js.map deleted file mode 100644 index 1f1b673b..00000000 --- a/build/es6/faceLandmarkNet/extractParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParams.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/extractParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAgB,MAAM,6BAA6B,CAAC;AAElF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,wBAAwB,OAAqB;IAEjD,IAAM,aAAa,GAAmB,EAAE,CAAA;IAElC,IAAA,mCAG4B,EAFhC,kCAAc,EACd,4CAAmB,CACa;IAE5B,IAAA,qDAG8C,EAFlD,sDAAwB,EACxB,oCAAe,CACmC;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;IAC3D,IAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAE1C,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,EAAE,IAAA,EAAE;KAC/C,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/extractParamsTiny.d.ts b/build/es6/faceLandmarkNet/extractParamsTiny.d.ts deleted file mode 100644 index ef9c65b1..00000000 --- a/build/es6/faceLandmarkNet/extractParamsTiny.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { TinyNetParams } from './types'; -export declare function extractParamsTiny(weights: Float32Array): { - params: TinyNetParams; - paramMappings: ParamMapping[]; -}; diff --git a/build/es6/faceLandmarkNet/extractParamsTiny.js b/build/es6/faceLandmarkNet/extractParamsTiny.js deleted file mode 100644 index 20ef32c0..00000000 --- a/build/es6/faceLandmarkNet/extractParamsTiny.js +++ /dev/null @@ -1,19 +0,0 @@ -import { extractWeightsFactory } from 'tfjs-image-recognition-base'; -import { extractorsFactory } from './extractorsFactory'; -export function extractParamsTiny(weights) { - var paramMappings = []; - var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; - var _b = extractorsFactory(extractWeights, paramMappings), extractDenseBlock3Params = _b.extractDenseBlock3Params, extractFCParams = _b.extractFCParams; - var dense0 = extractDenseBlock3Params(3, 32, 'dense0', true); - var dense1 = extractDenseBlock3Params(32, 64, 'dense1'); - var dense2 = extractDenseBlock3Params(64, 128, 'dense2'); - var fc = extractFCParams(128, 136, 'fc'); - if (getRemainingWeights().length !== 0) { - throw new Error("weights remaing after extract: " + getRemainingWeights().length); - } - return { - paramMappings: paramMappings, - params: { dense0: dense0, dense1: dense1, dense2: dense2, fc: fc } - }; -} -//# sourceMappingURL=extractParamsTiny.js.map \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/extractParamsTiny.js.map b/build/es6/faceLandmarkNet/extractParamsTiny.js.map deleted file mode 100644 index 121ea889..00000000 --- a/build/es6/faceLandmarkNet/extractParamsTiny.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractParamsTiny.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/extractParamsTiny.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAgB,MAAM,6BAA6B,CAAC;AAElF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,4BAA4B,OAAqB;IAErD,IAAM,aAAa,GAAmB,EAAE,CAAA;IAElC,IAAA,mCAG4B,EAFhC,kCAAc,EACd,4CAAmB,CACa;IAE5B,IAAA,qDAG8C,EAFlD,sDAAwB,EACxB,oCAAe,CACmC;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,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAE1C,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,EAAE,IAAA,EAAE;KACvC,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/extractorsFactory.d.ts b/build/es6/faceLandmarkNet/extractorsFactory.d.ts deleted file mode 100644 index 247236f3..00000000 --- a/build/es6/faceLandmarkNet/extractorsFactory.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ExtractWeightsFunction, ParamMapping } from 'tfjs-image-recognition-base'; -import { FCParams } from 'tfjs-tiny-yolov2'; -import { DenseBlock3Params, DenseBlock4Params } from './types'; -export declare function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]): { - extractDenseBlock3Params: (channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer?: boolean) => DenseBlock3Params; - extractDenseBlock4Params: (channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer?: boolean) => DenseBlock4Params; - extractFCParams: (channelsIn: number, channelsOut: number, mappedPrefix: string) => FCParams; -}; diff --git a/build/es6/faceLandmarkNet/extractorsFactory.js b/build/es6/faceLandmarkNet/extractorsFactory.js deleted file mode 100644 index f2b2775e..00000000 --- a/build/es6/faceLandmarkNet/extractorsFactory.js +++ /dev/null @@ -1,42 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { extractConvParamsFactory, SeparableConvParams } from 'tfjs-tiny-yolov2'; -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 SeparableConvParams(depthwise_filter, pointwise_filter, bias); - } - function extractFCParams(channelsIn, channelsOut, mappedPrefix) { - var weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]); - var bias = tf.tensor1d(extractWeights(channelsOut)); - paramMappings.push({ paramPath: mappedPrefix + "/weights" }, { paramPath: mappedPrefix + "/bias" }); - return { - weights: weights, - bias: 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, - extractFCParams: extractFCParams - }; -} -//# sourceMappingURL=extractorsFactory.js.map \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/extractorsFactory.js.map b/build/es6/faceLandmarkNet/extractorsFactory.js.map deleted file mode 100644 index 50f49f15..00000000 --- a/build/es6/faceLandmarkNet/extractorsFactory.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extractorsFactory.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/extractorsFactory.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/fullyConnectedLayer.d.ts b/build/es6/faceLandmarkNet/fullyConnectedLayer.d.ts deleted file mode 100644 index f9f052aa..00000000 --- a/build/es6/faceLandmarkNet/fullyConnectedLayer.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { FCParams } from 'tfjs-tiny-yolov2'; -export declare function fullyConnectedLayer(x: tf.Tensor2D, params: FCParams): tf.Tensor2D; diff --git a/build/es6/faceLandmarkNet/fullyConnectedLayer.js b/build/es6/faceLandmarkNet/fullyConnectedLayer.js deleted file mode 100644 index 1bf3c127..00000000 --- a/build/es6/faceLandmarkNet/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/faceLandmarkNet/fullyConnectedLayer.js.map b/build/es6/faceLandmarkNet/fullyConnectedLayer.js.map deleted file mode 100644 index 143c3188..00000000 --- a/build/es6/faceLandmarkNet/fullyConnectedLayer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fullyConnectedLayer.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/fullyConnectedLayer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG5C,MAAM,8BACJ,CAAc,EACd,MAAgB;IAEhB,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/faceLandmarkNet/index.d.ts b/build/es6/faceLandmarkNet/index.d.ts deleted file mode 100644 index 6e5d1cd4..00000000 --- a/build/es6/faceLandmarkNet/index.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { FaceLandmark68Net } from './FaceLandmark68Net'; -export * from './FaceLandmark68Net'; -export * from './FaceLandmark68TinyNet'; -export declare class FaceLandmarkNet extends FaceLandmark68Net { -} -export declare function createFaceLandmarkNet(weights: Float32Array): FaceLandmarkNet; diff --git a/build/es6/faceLandmarkNet/index.js b/build/es6/faceLandmarkNet/index.js deleted file mode 100644 index 258fac90..00000000 --- a/build/es6/faceLandmarkNet/index.js +++ /dev/null @@ -1,18 +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 }; -export function createFaceLandmarkNet(weights) { - var net = new FaceLandmarkNet(); - net.extractWeights(weights); - return net; -} -//# 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 37615432..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;;AAEzD,MAAM,gCAAgC,OAAqB;IACzD,IAAM,GAAG,GAAG,IAAI,eAAe,EAAE,CAAA;IACjC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC"} \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/loadParamsFactory.d.ts b/build/es6/faceLandmarkNet/loadParamsFactory.d.ts deleted file mode 100644 index f4c2f6ad..00000000 --- a/build/es6/faceLandmarkNet/loadParamsFactory.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { FCParams } from 'tfjs-tiny-yolov2'; -import { DenseBlock3Params, DenseBlock4Params } from './types'; -export declare function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]): { - extractDenseBlock3Params: (prefix: string, isFirstLayer?: boolean) => DenseBlock3Params; - extractDenseBlock4Params: (prefix: string, isFirstLayer?: boolean) => DenseBlock4Params; - extractFcParams: (prefix: string) => FCParams; -}; diff --git a/build/es6/faceLandmarkNet/loadParamsFactory.js b/build/es6/faceLandmarkNet/loadParamsFactory.js deleted file mode 100644 index 13eb64be..00000000 --- a/build/es6/faceLandmarkNet/loadParamsFactory.js +++ /dev/null @@ -1,46 +0,0 @@ -import { extractWeightEntryFactory } from 'tfjs-image-recognition-base'; -import { SeparableConvParams } from 'tfjs-tiny-yolov2'; -export 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 }; - } - function extractFcParams(prefix) { - var weights = extractWeightEntry(prefix + "/weights", 2); - var bias = extractWeightEntry(prefix + "/bias", 1); - return { weights: weights, bias: bias }; - } - return { - extractDenseBlock3Params: extractDenseBlock3Params, - extractDenseBlock4Params: extractDenseBlock4Params, - extractFcParams: extractFcParams - }; -} -//# sourceMappingURL=loadParamsFactory.js.map \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/loadParamsFactory.js.map b/build/es6/faceLandmarkNet/loadParamsFactory.js.map deleted file mode 100644 index 555a6d20..00000000 --- a/build/es6/faceLandmarkNet/loadParamsFactory.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadParamsFactory.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/loadParamsFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAgB,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAwB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAI7E,MAAM,4BAA4B,SAAc,EAAE,aAA6B;IAE7E,IAAM,kBAAkB,GAAG,yBAAyB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAE9E,2BAA2B,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,oCAAoC,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,mBAAmB,CAC5B,gBAAgB,EAChB,gBAAgB,EAChB,IAAI,CACL,CAAA;IACH,CAAC;IAED,kCAAkC,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,kCAAkC,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,yBAAyB,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,OAAO;QACL,wBAAwB,0BAAA;QACxB,wBAAwB,0BAAA;QACxB,eAAe,iBAAA;KAChB,CAAA;AACH,CAAC"} \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/loadQuantizedParams.d.ts b/build/es6/faceLandmarkNet/loadQuantizedParams.d.ts deleted file mode 100644 index c5e1dc44..00000000 --- a/build/es6/faceLandmarkNet/loadQuantizedParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: ParamMapping[]; -}>; diff --git a/build/es6/faceLandmarkNet/loadQuantizedParams.js b/build/es6/faceLandmarkNet/loadQuantizedParams.js deleted file mode 100644 index 836b4441..00000000 --- a/build/es6/faceLandmarkNet/loadQuantizedParams.js +++ /dev/null @@ -1,28 +0,0 @@ -import * as tslib_1 from "tslib"; -import { disposeUnusedWeightTensors, loadWeightMap } from 'tfjs-image-recognition-base'; -import { loadParamsFactory } from './loadParamsFactory'; -var DEFAULT_MODEL_NAME = 'face_landmark_68_model'; -export function loadQuantizedParams(uri) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var weightMap, paramMappings, _a, extractDenseBlock4Params, extractFcParams, params; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME)]; - case 1: - weightMap = _b.sent(); - paramMappings = []; - _a = loadParamsFactory(weightMap, paramMappings), extractDenseBlock4Params = _a.extractDenseBlock4Params, extractFcParams = _a.extractFcParams; - params = { - dense0: extractDenseBlock4Params('dense0', true), - dense1: extractDenseBlock4Params('dense1'), - dense2: extractDenseBlock4Params('dense2'), - dense3: extractDenseBlock4Params('dense3'), - fc: extractFcParams('fc') - }; - disposeUnusedWeightTensors(weightMap, paramMappings); - return [2 /*return*/, { params: params, paramMappings: paramMappings }]; - } - }); - }); -} -//# sourceMappingURL=loadQuantizedParams.js.map \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/loadQuantizedParams.js.map b/build/es6/faceLandmarkNet/loadQuantizedParams.js.map deleted file mode 100644 index 1c712c52..00000000 --- a/build/es6/faceLandmarkNet/loadQuantizedParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadQuantizedParams.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/loadQuantizedParams.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAgB,MAAM,6BAA6B,CAAC;AAEtG,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,IAAM,kBAAkB,GAAG,wBAAwB,CAAA;AAEnD,MAAM,8BACJ,GAAuB;;;;;wBAGL,qBAAM,aAAa,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAA;;oBAAxD,SAAS,GAAG,SAA4C;oBACxD,aAAa,GAAmB,EAAE,CAAA;oBAElC,KAGF,iBAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,EAF7C,wBAAwB,8BAAA,EACxB,eAAe,qBAAA,CAC8B;oBAEzC,MAAM,GAAG;wBACb,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC;wBAChD,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;qBAC1B,CAAA;oBAED,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;oBAEpD,sBAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,EAAA;;;;CACjC"} \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/loadQuantizedParamsTiny.d.ts b/build/es6/faceLandmarkNet/loadQuantizedParamsTiny.d.ts deleted file mode 100644 index 36f4ea62..00000000 --- a/build/es6/faceLandmarkNet/loadQuantizedParamsTiny.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { TinyNetParams } from './types'; -export declare function loadQuantizedParamsTiny(uri: string | undefined): Promise<{ - params: TinyNetParams; - paramMappings: ParamMapping[]; -}>; diff --git a/build/es6/faceLandmarkNet/loadQuantizedParamsTiny.js b/build/es6/faceLandmarkNet/loadQuantizedParamsTiny.js deleted file mode 100644 index 8e0798dd..00000000 --- a/build/es6/faceLandmarkNet/loadQuantizedParamsTiny.js +++ /dev/null @@ -1,27 +0,0 @@ -import * as tslib_1 from "tslib"; -import { disposeUnusedWeightTensors, loadWeightMap } from 'tfjs-image-recognition-base'; -import { loadParamsFactory } from './loadParamsFactory'; -var DEFAULT_MODEL_NAME = 'face_landmark_68_tiny_model'; -export function loadQuantizedParamsTiny(uri) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var weightMap, paramMappings, _a, extractDenseBlock3Params, extractFcParams, params; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME)]; - case 1: - weightMap = _b.sent(); - paramMappings = []; - _a = loadParamsFactory(weightMap, paramMappings), extractDenseBlock3Params = _a.extractDenseBlock3Params, extractFcParams = _a.extractFcParams; - params = { - dense0: extractDenseBlock3Params('dense0', true), - dense1: extractDenseBlock3Params('dense1'), - dense2: extractDenseBlock3Params('dense2'), - fc: extractFcParams('fc') - }; - disposeUnusedWeightTensors(weightMap, paramMappings); - return [2 /*return*/, { params: params, paramMappings: paramMappings }]; - } - }); - }); -} -//# sourceMappingURL=loadQuantizedParamsTiny.js.map \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/loadQuantizedParamsTiny.js.map b/build/es6/faceLandmarkNet/loadQuantizedParamsTiny.js.map deleted file mode 100644 index 613e4049..00000000 --- a/build/es6/faceLandmarkNet/loadQuantizedParamsTiny.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadQuantizedParamsTiny.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/loadQuantizedParamsTiny.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAgB,MAAM,6BAA6B,CAAC;AAEtG,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,IAAM,kBAAkB,GAAG,6BAA6B,CAAA;AAExD,MAAM,kCACJ,GAAuB;;;;;wBAGL,qBAAM,aAAa,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAA;;oBAAxD,SAAS,GAAG,SAA4C;oBACxD,aAAa,GAAmB,EAAE,CAAA;oBAElC,KAGF,iBAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,EAF7C,wBAAwB,8BAAA,EACxB,eAAe,qBAAA,CAC8B;oBAEzC,MAAM,GAAG;wBACb,MAAM,EAAE,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC;wBAChD,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC;wBAC1C,EAAE,EAAE,eAAe,CAAC,IAAI,CAAC;qBAC1B,CAAA;oBAED,0BAA0B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;oBAEpD,sBAAO,EAAE,MAAM,QAAA,EAAE,aAAa,eAAA,EAAE,EAAA;;;;CACjC"} \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/types.d.ts b/build/es6/faceLandmarkNet/types.d.ts deleted file mode 100644 index 2e5131f8..00000000 --- a/build/es6/faceLandmarkNet/types.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ConvParams, FCParams, SeparableConvParams } from 'tfjs-tiny-yolov2'; -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 FCWithBatchNormParams = BatchNormParams & { - weights: tf.Tensor2D; -}; -export declare type DenseBlock3Params = { - conv0: SeparableConvParams | ConvParams; - conv1: SeparableConvParams; - conv2: SeparableConvParams; -}; -export declare type DenseBlock4Params = DenseBlock3Params & { - conv3: SeparableConvParams; -}; -export declare type TinyNetParams = { - dense0: DenseBlock3Params; - dense1: DenseBlock3Params; - dense2: DenseBlock3Params; - fc: FCParams; -}; -export declare type NetParams = { - dense0: DenseBlock4Params; - dense1: DenseBlock4Params; - dense2: DenseBlock4Params; - dense3: DenseBlock4Params; - fc: FCParams; -}; diff --git a/build/es6/faceLandmarkNet/types.js b/build/es6/faceLandmarkNet/types.js deleted file mode 100644 index 5b2306a4..00000000 --- a/build/es6/faceLandmarkNet/types.js +++ /dev/null @@ -1 +0,0 @@ -//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/build/es6/faceLandmarkNet/types.js.map b/build/es6/faceLandmarkNet/types.js.map deleted file mode 100644 index 7dfe1a59..00000000 --- a/build/es6/faceLandmarkNet/types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/faceLandmarkNet/types.ts"],"names":[],"mappings":""} \ 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 f34abc0c..00000000 --- a/build/es6/faceRecognitionNet/FaceRecognitionNet.d.ts +++ /dev/null @@ -1,23 +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 loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }>; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }; -} diff --git a/build/es6/faceRecognitionNet/FaceRecognitionNet.js b/build/es6/faceRecognitionNet/FaceRecognitionNet.js deleted file mode 100644 index 3896effd..00000000 --- a/build/es6/faceRecognitionNet/FaceRecognitionNet.js +++ /dev/null @@ -1,86 +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 { loadQuantizedParams } from './loadQuantizedParams'; -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 _this = this; - var netInput, faceDescriptorTensors, faceDescriptorsForBatch; - 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.loadQuantizedParams = function (uri) { - return loadQuantizedParams(uri); - }; - 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 34deb6d9..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":"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"} \ 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 17fef6b7..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,mBACE,CAAc,EACd,MAAuB,EACvB,OAAyB,EACzB,QAAiB,EACjB,OAAkC;IAAlC,wBAAA,EAAA,gBAAkC;IAE5B,IAAA,gBAA+B,EAA7B,oBAAO,EAAE,cAAI,CAAgB;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,eAAe,CAAc,EAAE,MAAuB;IAC1D,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,qBAAqB,CAAc,EAAE,MAAuB;IAChE,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,mBAAmB,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 40295777..00000000 --- a/build/es6/faceRecognitionNet/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: ParamMapping[]; -}; diff --git a/build/es6/faceRecognitionNet/extractParams.js b/build/es6/faceRecognitionNet/extractParams.js deleted file mode 100644 index 1259d36a..00000000 --- a/build/es6/faceRecognitionNet/extractParams.js +++ /dev/null @@ -1,87 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { extractWeightsFactory, isFloat } 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 = 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 58314bd2..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":"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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 f733cf2b..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,mCAAmC,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/loadQuantizedParams.d.ts b/build/es6/faceRecognitionNet/loadQuantizedParams.d.ts deleted file mode 100644 index c5e1dc44..00000000 --- a/build/es6/faceRecognitionNet/loadQuantizedParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: ParamMapping[]; -}>; diff --git a/build/es6/faceRecognitionNet/loadQuantizedParams.js b/build/es6/faceRecognitionNet/loadQuantizedParams.js deleted file mode 100644 index c9e33fac..00000000 --- a/build/es6/faceRecognitionNet/loadQuantizedParams.js +++ /dev/null @@ -1,82 +0,0 @@ -import * as tslib_1 from "tslib"; -import { disposeUnusedWeightTensors, extractWeightEntryFactory, isTensor2D, loadWeightMap, } from 'tfjs-image-recognition-base'; -var DEFAULT_MODEL_NAME = 'face_recognition_model'; -function extractorsFactory(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 - }; -} -export function loadQuantizedParams(uri) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var weightMap, paramMappings, _a, extractConvLayerParams, extractResidualLayerParams, conv32_down, conv32_1, conv32_2, conv32_3, conv64_down, conv64_1, conv64_2, conv64_3, conv128_down, conv128_1, conv128_2, conv256_down, conv256_1, conv256_2, conv256_down_out, fc, params; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME)]; - case 1: - weightMap = _b.sent(); - paramMappings = []; - _a = extractorsFactory(weightMap, paramMappings), extractConvLayerParams = _a.extractConvLayerParams, extractResidualLayerParams = _a.extractResidualLayerParams; - conv32_down = extractConvLayerParams('conv32_down'); - conv32_1 = extractResidualLayerParams('conv32_1'); - conv32_2 = extractResidualLayerParams('conv32_2'); - conv32_3 = extractResidualLayerParams('conv32_3'); - conv64_down = extractResidualLayerParams('conv64_down'); - conv64_1 = extractResidualLayerParams('conv64_1'); - conv64_2 = extractResidualLayerParams('conv64_2'); - conv64_3 = extractResidualLayerParams('conv64_3'); - conv128_down = extractResidualLayerParams('conv128_down'); - conv128_1 = extractResidualLayerParams('conv128_1'); - conv128_2 = extractResidualLayerParams('conv128_2'); - conv256_down = extractResidualLayerParams('conv256_down'); - conv256_1 = extractResidualLayerParams('conv256_1'); - conv256_2 = extractResidualLayerParams('conv256_2'); - conv256_down_out = extractResidualLayerParams('conv256_down_out'); - 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); - } - 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 [2 /*return*/, { params: params, paramMappings: paramMappings }]; - } - }); - }); -} -//# sourceMappingURL=loadQuantizedParams.js.map \ No newline at end of file diff --git a/build/es6/faceRecognitionNet/loadQuantizedParams.js.map b/build/es6/faceRecognitionNet/loadQuantizedParams.js.map deleted file mode 100644 index fe466e02..00000000 --- a/build/es6/faceRecognitionNet/loadQuantizedParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadQuantizedParams.js","sourceRoot":"","sources":["../../../src/faceRecognitionNet/loadQuantizedParams.ts"],"names":[],"mappings":"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"} \ 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 403745e6..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,mBAAmB,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,uBAAuB,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 f2060b6c..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,gBAAgB,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 8f3446d4..00000000 --- a/build/es6/faceRecognitionNet/types.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ConvParams } from 'tfjs-tiny-yolov2'; -export declare type ScaleLayerParams = { - weights: tf.Tensor1D; - biases: tf.Tensor1D; -}; -export declare type ResidualLayerParams = { - conv1: ConvLayerParams; - conv2: ConvLayerParams; -}; -export declare type ConvLayerParams = { - conv: 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/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 702d2e34..00000000 --- a/build/es6/globalApi/ComputeFaceDescriptorsTasks.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetectionWithLandmarks } from '../classes/FaceDetectionWithLandmarks'; -import { FullFaceDescription } from '../classes/FullFaceDescription'; -import { ComposableTask } from './ComposableTask'; -export declare class ComputeFaceDescriptorsTaskBase extends ComposableTask { - protected detectFaceLandmarksTask: ComposableTask | Promise; - protected input: TNetInput; - constructor(detectFaceLandmarksTask: ComposableTask | Promise, input: TNetInput); -} -export declare class ComputeAllFaceDescriptorsTask extends ComputeFaceDescriptorsTaskBase { - run(): Promise; -} -export declare class ComputeSingleFaceDescriptorTask extends ComputeFaceDescriptorsTaskBase { - run(): Promise; -} diff --git a/build/es6/globalApi/ComputeFaceDescriptorsTasks.js b/build/es6/globalApi/ComputeFaceDescriptorsTasks.js deleted file mode 100644 index 4d246813..00000000 --- a/build/es6/globalApi/ComputeFaceDescriptorsTasks.js +++ /dev/null @@ -1,90 +0,0 @@ -import * as tslib_1 from "tslib"; -import { FullFaceDescription } from '../classes/FullFaceDescription'; -import { extractFaces } from '../dom'; -import { ComposableTask } from './ComposableTask'; -import { nets } from './nets'; -var ComputeFaceDescriptorsTaskBase = /** @class */ (function (_super) { - tslib_1.__extends(ComputeFaceDescriptorsTaskBase, _super); - function ComputeFaceDescriptorsTaskBase(detectFaceLandmarksTask, input) { - var _this = _super.call(this) || this; - _this.detectFaceLandmarksTask = detectFaceLandmarksTask; - _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 _this = this; - var facesWithLandmarks, alignedFaceCanvases; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.detectFaceLandmarksTask]; - case 1: - facesWithLandmarks = _a.sent(); - return [4 /*yield*/, extractFaces(this.input, facesWithLandmarks.map(function (_a) { - var landmarks = _a.landmarks; - return landmarks.align(); - }))]; - case 2: - alignedFaceCanvases = _a.sent(); - return [4 /*yield*/, Promise.all(facesWithLandmarks.map(function (_a, i) { - var detection = _a.detection, landmarks = _a.landmarks; - return tslib_1.__awaiter(_this, void 0, void 0, function () { - var descriptor; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, nets.faceRecognitionNet.computeFaceDescriptor(alignedFaceCanvases[i])]; - case 1: - descriptor = _b.sent(); - return [2 /*return*/, new FullFaceDescription(detection, landmarks, descriptor)]; - } - }); - }); - }))]; - case 3: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - 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 detectionWithLandmarks, detection, landmarks, alignedRect, alignedFaceCanvas, descriptor; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.detectFaceLandmarksTask]; - case 1: - detectionWithLandmarks = _a.sent(); - if (!detectionWithLandmarks) { - return [2 /*return*/]; - } - detection = detectionWithLandmarks.detection, landmarks = detectionWithLandmarks.landmarks, alignedRect = detectionWithLandmarks.alignedRect; - return [4 /*yield*/, extractFaces(this.input, [alignedRect])]; - case 2: - alignedFaceCanvas = (_a.sent())[0]; - return [4 /*yield*/, nets.faceRecognitionNet.computeFaceDescriptor(alignedFaceCanvas)]; - case 3: - descriptor = _a.sent(); - return [2 /*return*/, new FullFaceDescription(detection, landmarks, 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 c61181fa..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":";AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;IAA4F,0DAAuB;IACjH,wCACY,uBAA+G,EAC/G,KAAgB;QAF5B,YAIE,iBAAO,SACR;QAJW,6BAAuB,GAAvB,uBAAuB,CAAwF;QAC/G,WAAK,GAAL,KAAK,CAAW;;IAG5B,CAAC;IACH,qCAAC;AAAD,CAAC,AAPD,CAA4F,cAAc,GAOzG;;AAED;IAAmD,yDAAmF;IAAtI;;IAeA,CAAC;IAbc,2CAAG,GAAhB;;;;;;4BAE6B,qBAAM,IAAI,CAAC,uBAAuB,EAAA;;wBAAvD,kBAAkB,GAAG,SAAkC;wBACjC,qBAAM,YAAY,CAC5C,IAAI,CAAC,KAAK,EACV,kBAAkB,CAAC,GAAG,CAAC,UAAC,EAAa;oCAAX,wBAAS;gCAAO,OAAA,SAAS,CAAC,KAAK,EAAE;4BAAjB,CAAiB,CAAC,CAC7D,EAAA;;wBAHK,mBAAmB,GAAG,SAG3B;wBAEM,qBAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAO,EAAwB,EAAE,CAAC;oCAAzB,wBAAS,EAAE,wBAAS;;;;;oDACxD,qBAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAA;;gDAAxF,UAAU,GAAG,SAA2F;gDAC9G,sBAAO,IAAI,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,EAAA;;;;6BACjE,CAAC,CAAC,EAAA;4BAHH,sBAAO,SAGJ,EAAA;;;;KACJ;IACH,oCAAC;AAAD,CAAC,AAfD,CAAmD,8BAA8B,GAehF;;AAED;IAAqD,2DAAuG;IAA5J;;IAeA,CAAC;IAbc,6CAAG,GAAhB;;;;;4BAEiC,qBAAM,IAAI,CAAC,uBAAuB,EAAA;;wBAA3D,sBAAsB,GAAG,SAAkC;wBACjE,IAAI,CAAC,sBAAsB,EAAE;4BAC3B,sBAAM;yBACP;wBAEO,SAAS,GAA6B,sBAAsB,UAAnD,EAAE,SAAS,GAAkB,sBAAsB,UAAxC,EAAE,WAAW,GAAK,sBAAsB,YAA3B,CAA2B;wBACzC,qBAAM,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC,EAAA;;wBAAlE,iBAAiB,GAAG,CAAC,SAA6C,CAAC,CAAC,CAAC,CAAC;wBACzD,qBAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,EAAA;;wBAAnF,UAAU,GAAG,SAAsF;wBAEzG,sBAAO,IAAI,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,EAAA;;;;KACjE;IACH,sCAAC;AAAD,CAAC,AAfD,CAAqD,8BAA8B,GAelF"} \ 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 2bcb6adf..00000000 --- a/build/es6/globalApi/DetectFaceLandmarksTasks.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { FaceDetectionWithLandmarks } from '../classes/FaceDetectionWithLandmarks'; -import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net'; -import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet'; -import { ComposableTask } from './ComposableTask'; -import { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks'; -export declare class DetectFaceLandmarksTaskBase extends ComposableTask { - protected detectFacesTask: ComposableTask | Promise; - protected input: TNetInput; - protected useTinyLandmarkNet: boolean; - constructor(detectFacesTask: ComposableTask | Promise, input: TNetInput, useTinyLandmarkNet: boolean); - protected readonly landmarkNet: FaceLandmark68Net | FaceLandmark68TinyNet; -} -export declare class DetectAllFaceLandmarksTask extends DetectFaceLandmarksTaskBase { - run(): Promise; - withFaceDescriptors(): ComputeAllFaceDescriptorsTask; -} -export declare class DetectSingleFaceLandmarksTask extends DetectFaceLandmarksTaskBase { - run(): Promise; - withFaceDescriptor(): ComputeSingleFaceDescriptorTask; -} diff --git a/build/es6/globalApi/DetectFaceLandmarksTasks.js b/build/es6/globalApi/DetectFaceLandmarksTasks.js deleted file mode 100644 index 91998781..00000000 --- a/build/es6/globalApi/DetectFaceLandmarksTasks.js +++ /dev/null @@ -1,94 +0,0 @@ -import * as tslib_1 from "tslib"; -import { FaceDetectionWithLandmarks } from '../classes/FaceDetectionWithLandmarks'; -import { extractFaces } from '../dom'; -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(detectFacesTask, input, useTinyLandmarkNet) { - var _this = _super.call(this) || this; - _this.detectFacesTask = detectFacesTask; - _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 _this = this; - var detections, faceCanvases, faceLandmarksByFace; - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.detectFacesTask]; - case 1: - detections = _a.sent(); - return [4 /*yield*/, extractFaces(this.input, detections)]; - case 2: - faceCanvases = _a.sent(); - return [4 /*yield*/, Promise.all(faceCanvases.map(function (canvas) { return _this.landmarkNet.detectLandmarks(canvas); }))]; - case 3: - faceLandmarksByFace = _a.sent(); - return [2 /*return*/, detections.map(function (detection, i) { - return new FaceDetectionWithLandmarks(detection, 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 detection, faceCanvas, _a, _b; - return tslib_1.__generator(this, function (_c) { - switch (_c.label) { - case 0: return [4 /*yield*/, this.detectFacesTask]; - case 1: - detection = _c.sent(); - if (!detection) { - return [2 /*return*/]; - } - return [4 /*yield*/, extractFaces(this.input, [detection])]; - case 2: - faceCanvas = (_c.sent())[0]; - _a = FaceDetectionWithLandmarks.bind; - _b = [void 0, detection]; - return [4 /*yield*/, this.landmarkNet.detectLandmarks(faceCanvas)]; - case 3: return [2 /*return*/, new (_a.apply(FaceDetectionWithLandmarks, _b.concat([_c.sent()])))()]; - } - }); - }); - }; - 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 5cec0db3..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":";AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAC/G,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;IAAoF,uDAA0B;IAC5G,qCACY,eAAuF,EACvF,KAAgB,EAChB,kBAA2B;QAHvC,YAKE,iBAAO,SACR;QALW,qBAAe,GAAf,eAAe,CAAwE;QACvF,WAAK,GAAL,KAAK,CAAW;QAChB,wBAAkB,GAAlB,kBAAkB,CAAS;;IAGvC,CAAC;IAED,sBAAc,oDAAW;aAAzB;YACE,OAAO,IAAI,CAAC,kBAAkB;gBAC5B,CAAC,CAAC,IAAI,CAAC,qBAAqB;gBAC5B,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAA;QAC5B,CAAC;;;OAAA;IACH,kCAAC;AAAD,CAAC,AAdD,CAAoF,cAAc,GAcjG;;AAED;IAAgD,sDAA0E;IAA1H;;IAmBA,CAAC;IAjBc,wCAAG,GAAhB;;;;;;4BAEqB,qBAAM,IAAI,CAAC,eAAe,EAAA;;wBAAvC,UAAU,GAAG,SAA0B;wBACxB,qBAAM,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAA;;wBAAzD,YAAY,GAAG,SAA0C;wBAEnC,qBAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAC5D,UAAA,MAAM,IAAI,OAAA,KAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,EAAxC,CAAwC,CACnD,CAAC,EAAA;;wBAFI,mBAAmB,GAAG,SAEL;wBAEvB,sBAAO,UAAU,CAAC,GAAG,CAAC,UAAC,SAAS,EAAE,CAAC;gCACjC,OAAA,IAAI,0BAA0B,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;4BAAjE,CAAiE,CAClE,EAAA;;;;KACF;IAED,wDAAmB,GAAnB;QACE,OAAO,IAAI,6BAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5D,CAAC;IACH,iCAAC;AAAD,CAAC,AAnBD,CAAgD,2BAA2B,GAmB1E;;AAED;IAAmD,yDAA8F;IAAjJ;;IAmBA,CAAC;IAjBc,2CAAG,GAAhB;;;;;4BAEoB,qBAAM,IAAI,CAAC,eAAe,EAAA;;wBAAtC,SAAS,GAAG,SAA0B;wBAC5C,IAAI,CAAC,SAAS,EAAE;4BACd,sBAAM;yBACP;wBAEmB,qBAAM,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,EAAA;;wBAAzD,UAAU,GAAG,CAAC,SAA2C,CAAC,CAAC,CAAC,CAAC;6BACxD,0BAA0B;sCACnC,SAAS;wBACT,qBAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,EAAA;4BAFpD,sBAAO,cAAI,0BAA0B,aAEnC,SAAqE,MACtE,EAAA;;;;KACF;IAED,0DAAkB,GAAlB;QACE,OAAO,IAAI,+BAA+B,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9D,CAAC;IACH,oCAAC;AAAD,CAAC,AAnBD,CAAmD,2BAA2B,GAmB7E"} \ 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 a0b73885..00000000 --- a/build/es6/globalApi/DetectFacesTasks.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetection } from '../classes/FaceDetection'; -import { ComposableTask } from './ComposableTask'; -import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks'; -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; - withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectAllFaceLandmarksTask; -} -export declare class DetectSingleFaceTask extends DetectFacesTaskBase { - run(): Promise; - withFaceLandmarks(useTinyLandmarkNet?: boolean): DetectSingleFaceLandmarksTask; -} diff --git a/build/es6/globalApi/DetectFacesTasks.js b/build/es6/globalApi/DetectFacesTasks.js deleted file mode 100644 index d957f1cc..00000000 --- a/build/es6/globalApi/DetectFacesTasks.js +++ /dev/null @@ -1,83 +0,0 @@ -import * as tslib_1 from "tslib"; -import { TinyYolov2Options } from 'tfjs-tiny-yolov2'; -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'; -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.faceDetection; })]; - 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.withFaceLandmarks = function (useTinyLandmarkNet) { - if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; } - return new DetectAllFaceLandmarksTask(this, this.input, useTinyLandmarkNet); - }; - 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 () { - return tslib_1.__generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, new DetectAllFacesTask(this.input, this.options)]; - case 1: return [2 /*return*/, (_a.sent()) - .sort(function (f1, f2) { return f1.score - f2.score; })[0]]; - } - }); - }); - }; - DetectSingleFaceTask.prototype.withFaceLandmarks = function (useTinyLandmarkNet) { - if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; } - return new DetectSingleFaceLandmarksTask(this, this.input, useTinyLandmarkNet); - }; - 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 50de31c5..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 ea61bac1..00000000 --- a/build/es6/globalApi/FaceMatcher.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { FaceMatch } from '../classes/FaceMatch'; -import { FullFaceDescription } from '../classes/FullFaceDescription'; -import { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors'; -export declare class FaceMatcher { - private _labeledDescriptors; - private _distanceThreshold; - constructor(inputs: LabeledFaceDescriptors | FullFaceDescription | Float32Array | Array, 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 0e361205..00000000 --- a/build/es6/globalApi/FaceMatcher.js +++ /dev/null @@ -1,62 +0,0 @@ -import { FaceMatch } from '../classes/FaceMatch'; -import { FullFaceDescription } from '../classes/FullFaceDescription'; -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 FullFaceDescription) { - return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]); - } - if (desc instanceof Float32Array) { - return new LabeledFaceDescriptors(createUniqueLabel(), [desc]); - } - throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | FullFaceDescription | Float32Array | Array"); - }); - } - 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 a1b4f3ac..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/allFaces.d.ts b/build/es6/globalApi/allFaces.d.ts deleted file mode 100644 index 7c682877..00000000 --- a/build/es6/globalApi/allFaces.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { ITinyYolov2Options } from 'tfjs-tiny-yolov2'; -import { FullFaceDescription } from '../classes'; -import { IMtcnnOptions } from '../mtcnn/MtcnnOptions'; -export declare function allFacesSsdMobilenetv1(input: TNetInput, minConfidence?: number): Promise; -export declare function allFacesTinyYolov2(input: TNetInput, forwardParams?: 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 18d45da4..00000000 --- a/build/es6/globalApi/allFaces.js +++ /dev/null @@ -1,46 +0,0 @@ -import * as tslib_1 from "tslib"; -import { TinyYolov2Options } from 'tfjs-tiny-yolov2'; -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 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 31be8fb4..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":";AACA,OAAO,EAAsB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGzE,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,iCACJ,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,6BACJ,KAAgB,EAChB,aAAsC;IAAtC,8BAAA,EAAA,kBAAsC;;;;wBAE/B,qBAAM,cAAc,CAAC,KAAK,EAAE,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAAC;yBACrE,iBAAiB,EAAE;yBACnB,mBAAmB,EAAE,EAAA;wBAFxB,sBAAO,SAEiB,EAAA;;;;CACzB;AAED,MAAM,wBACJ,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 86a9c5e9..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,2BACJ,KAAgB,EAChB,OAA2D;IAA3D,wBAAA,EAAA,cAAoC,qBAAqB,EAAE;IAE3D,OAAO,IAAI,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,yBACJ,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 bd264f40..00000000 --- a/build/es6/globalApi/nets.d.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { ITinyYolov2Options } from 'tfjs-tiny-yolov2'; -import { FaceDetection } from '../classes/FaceDetection'; -import { FaceDetectionWithLandmarks } from '../classes/FaceDetectionWithLandmarks'; -import { FaceLandmarks5 } from '../classes/FaceLandmarks5'; -import { FaceLandmarks68 } from '../classes/FaceLandmarks68'; -import { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net'; -import { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet'; -import { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet'; -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/TinyYolov2'; -export declare const nets: { - ssdMobilenetv1: SsdMobilenetv1; - tinyFaceDetector: TinyFaceDetector; - tinyYolov2: TinyYolov2; - mtcnn: Mtcnn; - faceLandmark68Net: FaceLandmark68Net; - faceLandmark68TinyNet: FaceLandmark68TinyNet; - faceRecognitionNet: FaceRecognitionNet; -}; -/** - * 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: 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; -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 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 445d08de..00000000 --- a/build/es6/globalApi/nets.js +++ /dev/null @@ -1,104 +0,0 @@ -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/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() -}; -/** - * 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); -}; -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); }; -// 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 1ea47ec1..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 085925da..00000000 --- a/build/es6/globalApi/types.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TNetInput } from 'tfjs-image-recognition-base'; -import { TinyYolov2Options } from 'tfjs-tiny-yolov2'; -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 | 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 c7b129b4..00000000 --- a/build/es6/index.d.ts +++ /dev/null @@ -1,13 +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 './faceLandmarkNet/index'; -export * from './faceRecognitionNet/index'; -export * from './globalApi/index'; -export * from './mtcnn/index'; -export * from './ssdMobilenetv1/index'; -export * from './tinyFaceDetector/index'; -export * from './tinyYolov2/index'; -export * from './euclideanDistance'; diff --git a/build/es6/index.js b/build/es6/index.js deleted file mode 100644 index 91d0aa52..00000000 --- a/build/es6/index.js +++ /dev/null @@ -1,14 +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 './faceLandmarkNet/index'; -export * from './faceRecognitionNet/index'; -export * from './globalApi/index'; -export * from './mtcnn/index'; -export * from './ssdMobilenetv1/index'; -export * from './tinyFaceDetector/index'; -export * from './tinyYolov2/index'; -export * from './euclideanDistance'; -//# 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 943f6bbd..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,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,qBAAqB,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 68215c54..00000000 --- a/build/es6/mtcnn/Mtcnn.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; -import { FaceDetectionWithLandmarks } from '../classes/FaceDetectionWithLandmarks'; -import { FaceLandmarks5 } from '../classes/FaceLandmarks5'; -import { IMtcnnOptions } from './MtcnnOptions'; -import { NetParams } from './types'; -export declare class Mtcnn extends NeuralNetwork { - constructor(); - forwardInput(input: NetInput, forwardParams?: IMtcnnOptions): Promise<{ - results: FaceDetectionWithLandmarks[]; - stats: any; - }>; - forward(input: TNetInput, forwardParams?: IMtcnnOptions): Promise[]>; - forwardWithStats(input: TNetInput, forwardParams?: IMtcnnOptions): Promise<{ - results: FaceDetectionWithLandmarks[]; - stats: any; - }>; - protected loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }>; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }; -} diff --git a/build/es6/mtcnn/Mtcnn.js b/build/es6/mtcnn/Mtcnn.js deleted file mode 100644 index 1e59661f..00000000 --- a/build/es6/mtcnn/Mtcnn.js +++ /dev/null @@ -1,133 +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 { FaceDetectionWithLandmarks } from '../classes/FaceDetectionWithLandmarks'; -import { FaceLandmarks5 } from '../classes/FaceLandmarks5'; -import { bgrToRgbTensor } from './bgrToRgbTensor'; -import { CELL_SIZE } from './config'; -import { extractParams } from './extractParams'; -import { getSizesForScale } from './getSizesForScale'; -import { loadQuantizedParams } from './loadQuantizedParams'; -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.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 new FaceDetectionWithLandmarks(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])]; - } - }); - }); - }; - // none of the param tensors are quantized yet - Mtcnn.prototype.loadQuantizedParams = function (uri) { - return loadQuantizedParams(uri); - }; - 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 230b0036..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 ed24b4cd..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 6e707280..00000000 --- a/build/es6/mtcnn/ONet.js +++ /dev/null @@ -1,24 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { convLayer } from 'tfjs-tiny-yolov2'; -import { fullyConnectedLayer } from '../faceLandmarkNet/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 = 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 940f668c..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,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,MAAM,eAAe,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,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC3C,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 470b8fa2..00000000 --- a/build/es6/mtcnn/PNet.js +++ /dev/null @@ -1,14 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { convLayer } from 'tfjs-tiny-yolov2'; -import { sharedLayer } from './sharedLayers'; -export function PNet(x, params) { - return tf.tidy(function () { - var out = sharedLayer(x, params, true); - var conv = 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 = 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 4bc3cdf4..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,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,MAAM,eAAe,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,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACpD,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,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAEvD,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 816940c3..00000000 --- a/build/es6/mtcnn/RNet.js +++ /dev/null @@ -1,19 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { fullyConnectedLayer } from '../faceLandmarkNet/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 91852f63..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,wCAAwC,CAAC;AAC7E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,MAAM,eAAe,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 9b8e0aa4..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,yBAAyB,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 c5217d49..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 7e4be7d0..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, 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 _this = this; - var imgCtx, bitmaps, imagePatchesDatas; - 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*/, 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 be52a9da..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,EAAO,YAAY,EAAE,mBAAmB,EAAe,MAAM,6BAA6B,CAAC;AAElG,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,8BACJ,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,iBAAiB,CAAC,OAAO,CAAC,EAAA;;6BAClC,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 40295777..00000000 --- a/build/es6/mtcnn/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: ParamMapping[]; -}; diff --git a/build/es6/mtcnn/extractParams.js b/build/es6/mtcnn/extractParams.js deleted file mode 100644 index da1b2583..00000000 --- a/build/es6/mtcnn/extractParams.js +++ /dev/null @@ -1,66 +0,0 @@ -import * as tslib_1 from "tslib"; -import * as tf from '@tensorflow/tfjs-core'; -import { extractWeightsFactory } from 'tfjs-image-recognition-base'; -import { extractConvParamsFactory, extractFCParamsFactory } from 'tfjs-tiny-yolov2'; -function extractorsFactory(extractWeights, paramMappings) { - var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings); - var extractFCParams = 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 = 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 4ac45310..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/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 feaeeb40..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,2BAA2B,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 8885b857..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,sBAAsB,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/loadQuantizedParams.d.ts b/build/es6/mtcnn/loadQuantizedParams.d.ts deleted file mode 100644 index c5e1dc44..00000000 --- a/build/es6/mtcnn/loadQuantizedParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: ParamMapping[]; -}>; diff --git a/build/es6/mtcnn/loadQuantizedParams.js b/build/es6/mtcnn/loadQuantizedParams.js deleted file mode 100644 index b3b00990..00000000 --- a/build/es6/mtcnn/loadQuantizedParams.js +++ /dev/null @@ -1,78 +0,0 @@ -import * as tslib_1 from "tslib"; -import { disposeUnusedWeightTensors, extractWeightEntryFactory, loadWeightMap, } from 'tfjs-image-recognition-base'; -var DEFAULT_MODEL_NAME = 'mtcnn_model'; -function extractorsFactory(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 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 loadQuantizedParams(uri) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var weightMap, paramMappings, _a, extractPNetParams, extractRNetParams, extractONetParams, pnet, rnet, onet; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME)]; - case 1: - weightMap = _b.sent(); - paramMappings = []; - _a = extractorsFactory(weightMap, paramMappings), extractPNetParams = _a.extractPNetParams, extractRNetParams = _a.extractRNetParams, extractONetParams = _a.extractONetParams; - pnet = extractPNetParams(); - rnet = extractRNetParams(); - onet = extractONetParams(); - disposeUnusedWeightTensors(weightMap, paramMappings); - return [2 /*return*/, { params: { pnet: pnet, rnet: rnet, onet: onet }, paramMappings: paramMappings }]; - } - }); - }); -} -//# sourceMappingURL=loadQuantizedParams.js.map \ No newline at end of file diff --git a/build/es6/mtcnn/loadQuantizedParams.js.map b/build/es6/mtcnn/loadQuantizedParams.js.map deleted file mode 100644 index 7728a722..00000000 --- a/build/es6/mtcnn/loadQuantizedParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadQuantizedParams.js","sourceRoot":"","sources":["../../../src/mtcnn/loadQuantizedParams.ts"],"names":[],"mappings":"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"} \ 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 0ec5e039..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,oBAAoB,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 70ac701d..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,gBAAqC,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 d77b79f4..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,sBAAsB,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 ef9c6f15..00000000 --- a/build/es6/mtcnn/sharedLayers.js +++ /dev/null @@ -1,18 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { convLayer } from 'tfjs-tiny-yolov2'; -import { prelu } from './prelu'; -export function sharedLayer(x, params, isPnet) { - if (isPnet === void 0) { isPnet = false; } - return tf.tidy(function () { - var out = convLayer(x, params.conv1, 'valid'); - out = prelu(out, params.prelu1_alpha); - out = tf.maxPool(out, isPnet ? [2, 2] : [3, 3], [2, 2], 'same'); - out = convLayer(out, params.conv2, 'valid'); - out = prelu(out, params.prelu2_alpha); - out = isPnet ? out : tf.maxPool(out, [3, 3], [2, 2], 'valid'); - out = 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 02d540a1..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,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,MAAM,sBAAsB,CAAc,EAAE,MAAoB,EAAE,MAAuB;IAAvB,uBAAA,EAAA,cAAuB;IACvF,OAAO,EAAE,CAAC,IAAI,CAAC;QAEb,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC7C,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,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC3C,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,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC3C,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 93794b99..00000000 --- a/build/es6/mtcnn/stage1.js +++ /dev/null @@ -1,91 +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 = []; - for (var y = 0; y < scoresTensor.shape[0]; y++) { - for (var x = 0; x < scoresTensor.shape[1]; x++) { - if (scoresTensor.get(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 = scoresTensor.get(idx.y, idx.x); - var region = new MtcnnBox(regionsTensor.get(idx.y, idx.x, 0), regionsTensor.get(idx.y, idx.x, 1), regionsTensor.get(idx.y, idx.x, 2), regionsTensor.get(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 b8ffd3a6..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 d36774f7..00000000 --- a/build/es6/mtcnn/stage2.js +++ /dev/null @@ -1,66 +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) { - return new MtcnnBox(rnetOuts[indices[idx]].regions.get(0, 0), rnetOuts[indices[idx]].regions.get(0, 1), rnetOuts[indices[idx]].regions.get(0, 2), rnetOuts[indices[idx]].regions.get(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 dfb2e1c6..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 852b9fe0..00000000 --- a/build/es6/mtcnn/stage3.js +++ /dev/null @@ -1,73 +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) { return new MtcnnBox(onetOuts[idx].regions.get(0, 0), onetOuts[idx].regions.get(0, 1), onetOuts[idx].regions.get(0, 2), onetOuts[idx].regions.get(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) { - return new Point(((onetOuts[idx].points.get(0, ptIdx) * (finalBoxes[i].width + 1)) + finalBoxes[i].left), ((onetOuts[idx].points.get(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 f2bc06d0..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 fc2b533d..00000000 --- a/build/es6/mtcnn/types.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ConvParams, FCParams } from 'tfjs-tiny-yolov2'; -export declare type SharedParams = { - conv1: ConvParams; - prelu1_alpha: tf.Tensor1D; - conv2: ConvParams; - prelu2_alpha: tf.Tensor1D; - conv3: ConvParams; - prelu3_alpha: tf.Tensor1D; -}; -export declare type PNetParams = SharedParams & { - conv4_1: ConvParams; - conv4_2: ConvParams; -}; -export declare type RNetParams = SharedParams & { - fc1: FCParams; - prelu4_alpha: tf.Tensor1D; - fc2_1: FCParams; - fc2_2: FCParams; -}; -export declare type ONetParams = SharedParams & { - conv4: ConvParams; - prelu4_alpha: tf.Tensor1D; - fc1: FCParams; - prelu5_alpha: tf.Tensor1D; - fc2_1: FCParams; - fc2_2: FCParams; - fc2_3: FCParams; -}; -export declare type NetParams = { - pnet: PNetParams; - rnet: RNetParams; - onet: ONetParams; -}; 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/ssdMobilenetv1/SsdMobilenetv1.d.ts b/build/es6/ssdMobilenetv1/SsdMobilenetv1.d.ts deleted file mode 100644 index 3749d1c0..00000000 --- a/build/es6/ssdMobilenetv1/SsdMobilenetv1.d.ts +++ /dev/null @@ -1,31 +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 loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }>; - protected extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: { - originalPath?: string | undefined; - paramPath: string; - }[]; - }; -} diff --git a/build/es6/ssdMobilenetv1/SsdMobilenetv1.js b/build/es6/ssdMobilenetv1/SsdMobilenetv1.js deleted file mode 100644 index 4dc28b48..00000000 --- a/build/es6/ssdMobilenetv1/SsdMobilenetv1.js +++ /dev/null @@ -1,102 +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 { loadQuantizedParams } from './loadQuantizedParams'; -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, 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; - results = indices - .map(function (idx) { - var _a = [ - Math.max(0, boxes.get(idx, 0)), - Math.min(1.0, boxes.get(idx, 2)) - ].map(function (val) { return val * padY; }), top = _a[0], bottom = _a[1]; - var _b = [ - Math.max(0, boxes.get(idx, 1)), - Math.min(1.0, boxes.get(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.loadQuantizedParams = function (uri) { - return loadQuantizedParams(uri); - }; - 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 a78b8e04..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 3f710f3e..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 f5995bb1..00000000 --- a/build/es6/ssdMobilenetv1/boxPredictionLayer.js +++ /dev/null @@ -1,14 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { convLayer } from 'tfjs-tiny-yolov2'; -export function boxPredictionLayer(x, params) { - return tf.tidy(function () { - var batchSize = x.shape[0]; - var boxPredictionEncoding = tf.reshape(convLayer(x, params.box_encoding_predictor), [batchSize, -1, 1, 4]); - var classPrediction = tf.reshape(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 03faa5fb..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,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C,MAAM,6BACJ,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,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,sBAAsB,CAAC,EAC3C,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACtB,CAAA;QACD,IAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAChC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,EACpC,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 40295777..00000000 --- a/build/es6/ssdMobilenetv1/extractParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function extractParams(weights: Float32Array): { - params: NetParams; - paramMappings: ParamMapping[]; -}; diff --git a/build/es6/ssdMobilenetv1/extractParams.js b/build/es6/ssdMobilenetv1/extractParams.js deleted file mode 100644 index 6a82f4ef..00000000 --- a/build/es6/ssdMobilenetv1/extractParams.js +++ /dev/null @@ -1,159 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { extractWeightsFactory } 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 = 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 b14ea5a6..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/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 b97e564b..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,+BAA+B,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,iCAAiC,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/loadQuantizedParams.d.ts b/build/es6/ssdMobilenetv1/loadQuantizedParams.d.ts deleted file mode 100644 index c5e1dc44..00000000 --- a/build/es6/ssdMobilenetv1/loadQuantizedParams.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ParamMapping } from 'tfjs-image-recognition-base'; -import { NetParams } from './types'; -export declare function loadQuantizedParams(uri: string | undefined): Promise<{ - params: NetParams; - paramMappings: ParamMapping[]; -}>; diff --git a/build/es6/ssdMobilenetv1/loadQuantizedParams.js b/build/es6/ssdMobilenetv1/loadQuantizedParams.js deleted file mode 100644 index 61e9e4bc..00000000 --- a/build/es6/ssdMobilenetv1/loadQuantizedParams.js +++ /dev/null @@ -1,111 +0,0 @@ -import * as tslib_1 from "tslib"; -import { disposeUnusedWeightTensors, extractWeightEntryFactory, isTensor3D, loadWeightMap, } from 'tfjs-image-recognition-base'; -var DEFAULT_MODEL_NAME = 'ssd_mobilenetv1_model'; -function extractorsFactory(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 - }; -} -export function loadQuantizedParams(uri) { - return tslib_1.__awaiter(this, void 0, void 0, function () { - var weightMap, paramMappings, _a, extractMobilenetV1Params, extractPredictionLayerParams, extra_dim, params; - return tslib_1.__generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, loadWeightMap(uri, DEFAULT_MODEL_NAME)]; - case 1: - weightMap = _b.sent(); - paramMappings = []; - _a = extractorsFactory(weightMap, paramMappings), extractMobilenetV1Params = _a.extractMobilenetV1Params, extractPredictionLayerParams = _a.extractPredictionLayerParams; - 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); - } - params = { - mobilenetv1: extractMobilenetV1Params(), - prediction_layer: extractPredictionLayerParams(), - output_layer: { - extra_dim: extra_dim - } - }; - disposeUnusedWeightTensors(weightMap, paramMappings); - return [2 /*return*/, { params: params, paramMappings: paramMappings }]; - } - }); - }); -} -//# sourceMappingURL=loadQuantizedParams.js.map \ No newline at end of file diff --git a/build/es6/ssdMobilenetv1/loadQuantizedParams.js.map b/build/es6/ssdMobilenetv1/loadQuantizedParams.js.map deleted file mode 100644 index 1fc7025d..00000000 --- a/build/es6/ssdMobilenetv1/loadQuantizedParams.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"loadQuantizedParams.js","sourceRoot":"","sources":["../../../src/ssdMobilenetv1/loadQuantizedParams.ts"],"names":[],"mappings":"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"} \ 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 e6dac5e1..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.batchNormalization(out, params.batch_norm_mean, params.batch_norm_variance, epsilon, params.batch_norm_scale, params.batch_norm_offset); - 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 d803e587..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,4BACE,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,kBAAkB,CACzB,GAAG,EACH,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,mBAAmB,EAC1B,OAAO,EACP,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,iBAAiB,CACzB,CAAA;QACD,OAAO,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAElC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,+BAA+B,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,sBAAsB,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 dc1b72fa..00000000 --- a/build/es6/ssdMobilenetv1/nonMaxSuppression.js +++ /dev/null @@ -1,53 +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 yminI = Math.min(boxes.get(i, 0), boxes.get(i, 2)); - var xminI = Math.min(boxes.get(i, 1), boxes.get(i, 3)); - var ymaxI = Math.max(boxes.get(i, 0), boxes.get(i, 2)); - var xmaxI = Math.max(boxes.get(i, 1), boxes.get(i, 3)); - var yminJ = Math.min(boxes.get(j, 0), boxes.get(j, 2)); - var xminJ = Math.min(boxes.get(j, 1), boxes.get(j, 3)); - var ymaxJ = Math.max(boxes.get(j, 0), boxes.get(j, 2)); - var xmaxJ = Math.max(boxes.get(j, 1), boxes.get(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 57cce56b..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":"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"} \ 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 422d3484..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 c22a27be..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,6BACJ,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 7a53c797..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,0BACJ,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 f0eed191..00000000 --- a/build/es6/ssdMobilenetv1/types.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -import * as tf from '@tensorflow/tfjs-core'; -import { ConvParams } from 'tfjs-tiny-yolov2'; -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: ConvParams; - class_predictor: 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 36b07c85..00000000 --- a/build/es6/tinyFaceDetector/TinyFaceDetector.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Point, TNetInput } from 'tfjs-image-recognition-base'; -import { TinyYolov2 as TinyYolov2Base, ITinyYolov2Options } from 'tfjs-tiny-yolov2'; -import { FaceDetection } from '../classes'; -export declare class TinyFaceDetector extends TinyYolov2Base { - constructor(); - readonly anchors: Point[]; - locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise; - protected loadQuantizedParams(modelUri: string | undefined): any; -} diff --git a/build/es6/tinyFaceDetector/TinyFaceDetector.js b/build/es6/tinyFaceDetector/TinyFaceDetector.js deleted file mode 100644 index 822f9a0b..00000000 --- a/build/es6/tinyFaceDetector/TinyFaceDetector.js +++ /dev/null @@ -1,48 +0,0 @@ -import * as tslib_1 from "tslib"; -import { TinyYolov2 as TinyYolov2Base } from 'tfjs-tiny-yolov2'; -import { FaceDetection } from '../classes'; -import { BOX_ANCHORS, DEFAULT_MODEL_NAME, 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.loadQuantizedParams = function (modelUri) { - var defaultModelName = DEFAULT_MODEL_NAME; - return _super.prototype.loadQuantizedParams.call(this, modelUri, defaultModelName); - }; - return TinyFaceDetector; -}(TinyYolov2Base)); -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 5d416d41..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,EAAE,UAAU,IAAI,cAAc,EAAsB,MAAM,kBAAkB,CAAC;AAEpF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnF;IAAsC,4CAAc;IAElD;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,aAAiC;;;;;4BACjD,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,UAA8B,QAA4B;QACxD,IAAM,gBAAgB,GAAG,kBAAkB,CAAA;QAC3C,OAAO,iBAAM,mBAAmB,YAAC,QAAQ,EAAE,gBAAgB,CAAQ,CAAA;IACrE,CAAC;IACH,uBAAC;AAAD,CAAC,AA7BD,CAAsC,cAAc,GA6BnD"} \ 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 65d5d654..00000000 --- a/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ITinyYolov2Options, TinyYolov2Options } from 'tfjs-tiny-yolov2'; -export interface ITinyFaceDetectorOptions extends ITinyYolov2Options { -} -export declare class TinyFaceDetectorOptions extends TinyYolov2Options { - protected _name: string; -} diff --git a/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.js b/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.js deleted file mode 100644 index 4e48a40e..00000000 --- a/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.js +++ /dev/null @@ -1,13 +0,0 @@ -import * as tslib_1 from "tslib"; -import { TinyYolov2Options } from 'tfjs-tiny-yolov2'; -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; -}(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 1adcfc67..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,EAAsB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIzE;IAA6C,mDAAiB;IAA9D;QAAA,qEAEC;QADW,WAAK,GAAW,yBAAyB,CAAA;;IACrD,CAAC;IAAD,8BAAC;AAAD,CAAC,AAFD,CAA6C,iBAAiB,GAE7D"} \ 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 85ee0383..00000000 --- a/build/es6/tinyFaceDetector/const.d.ts +++ /dev/null @@ -1,5 +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]; -export declare const DEFAULT_MODEL_NAME = "tiny_face_detector_model"; diff --git a/build/es6/tinyFaceDetector/const.js b/build/es6/tinyFaceDetector/const.js deleted file mode 100644 index 3a2be9ed..00000000 --- a/build/es6/tinyFaceDetector/const.js +++ /dev/null @@ -1,12 +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]; -export var DEFAULT_MODEL_NAME = 'tiny_face_detector_model'; -//# 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 56b8aa5f..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;AAE5E,MAAM,CAAC,IAAM,kBAAkB,GAAG,0BAA0B,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 8792c136..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,iCAAiC,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 28161b6f..00000000 --- a/build/es6/tinyYolov2/TinyYolov2.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Point, TNetInput } from 'tfjs-image-recognition-base'; -import { ITinyYolov2Options, TinyYolov2 as TinyYolov2Base } from 'tfjs-tiny-yolov2'; -import { FaceDetection } from '../classes'; -export declare class TinyYolov2 extends TinyYolov2Base { - constructor(withSeparableConvs?: boolean); - readonly withSeparableConvs: boolean; - readonly anchors: Point[]; - locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise; - protected loadQuantizedParams(modelUri: string | undefined): any; -} diff --git a/build/es6/tinyYolov2/TinyYolov2.js b/build/es6/tinyYolov2/TinyYolov2.js deleted file mode 100644 index 3e66556c..00000000 --- a/build/es6/tinyYolov2/TinyYolov2.js +++ /dev/null @@ -1,60 +0,0 @@ -import * as tslib_1 from "tslib"; -import { TinyYolov2 as TinyYolov2Base } from 'tfjs-tiny-yolov2'; -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.loadQuantizedParams = function (modelUri) { - var defaultModelName = this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME; - return _super.prototype.loadQuantizedParams.call(this, modelUri, defaultModelName); - }; - return TinyYolov2; -}(TinyYolov2Base)); -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 b08f4c6e..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,EAAsB,UAAU,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEpF,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,sCAAc;IAE5C,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,aAAiC;;;;;4BACjD,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,UAA8B,QAA4B;QACxD,IAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,kBAAkB,CAAA;QACzG,OAAO,iBAAM,mBAAmB,YAAC,QAAQ,EAAE,gBAAgB,CAAQ,CAAA;IACrE,CAAC;IACH,iBAAC;AAAD,CAAC,AAvCD,CAAgC,cAAc,GAuC7C"} \ 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 37d04441..00000000 --- a/build/es6/tinyYolov2/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { TinyYolov2 } from './TinyYolov2'; -export * from './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 2ad4701a..00000000 --- a/build/es6/tinyYolov2/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import { TinyYolov2 } from './TinyYolov2'; -export * from './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 f23a091e..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,cAAc,cAAc,CAAC;AAE7B,MAAM,2BAA2B,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 1d0ee130..a4373418 100644 --- a/dist/face-api.js +++ b/dist/face-api.js @@ -1,6197 +1,6568 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (factory((global.faceapi = global.faceapi || {}))); + 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 2018 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=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]);};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=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 randUniform(e,t){var n=Math.random();return t*n+(1-n)*e}function distSquared(e,t){for(var n=0,r=0;r0,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;o1;--t)if(e%t==0)return [t,e/t];return [1,e]}function createShuffledIndices(e){for(var t=new Uint32Array(e),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 squeezeShape(e,t){for(var n=[],r=[],o=0,a=0;aa)&&1===e[a]&&(n.push(e[a]),r.push(a)),t[o]<=a&&o++;}1!==e[a]&&(n.push(e[a]),r.push(a));}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 checkComputationForNaN(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){return noConversionNeeded(e,t)?e:(Array.isArray(e)&&(e=flatten(e)),copyTypedArray(e,t,n))}function noConversionNeeded(e,t){return e instanceof Float32Array&&"float32"===t||e instanceof Int32Array&&"int32"===t||e instanceof Uint8Array&&"bool"===t}function makeOnesTypedArray(e,t){for(var n=makeZerosTypedArray(e,t),r=0;r1)for(var l=0;lFORMAT_LIMIT_NUM_VALS){var l=FORMAT_NUM_FIRST_LAST_VALS*i,c=Array.from(e.subarray(0,l)),p=Array.from(e.subarray(s-FORMAT_NUM_FIRST_LAST_VALS*i,s));return "complex64"===n&&(c=createComplexTuples(c),p=createComplexTuples(p)),["["+c.map(function(e,t){return valToString(e,o[t])}).join(", ")+", ..., "+p.map(function(e,t){return valToString(e,o[s-FORMAT_NUM_FIRST_LAST_VALS+t])}).join(", ")+"]"]}return ["["+("complex64"===n?createComplexTuples(e):Array.from(e)).map(function(e,t){return valToString(e,o[t])}).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=0;a--)for(i=(f=e[a]).inputs,c=0;c=0;r--)n(r);}function assertTypesMatch(e,t){assert(e.dtype===t.dtype,"The dtypes of the first("+e.dtype+") and second("+t.dtype+") input must match");}function isTensorInList(e,t){for(var n=0;n {...}) to avoid memory leaks.");return this.keepTensors.add(e.id),e},e.prototype.startScope=function(e,t){void 0===t&&(t=!1),t&&0===this.gradientScopeCount&&(this.activeTape=[]),t&&this.gradientScopeCount++;var n={track:[],name:"unnamed scope"};e&&(n.name=e),this.scopeStack.push(n),this.activeScope=n;},e.prototype.endScope=function(e,t){var n=this;void 0===t&&(t=!1),t&&(this.gradientScopeCount--,0===this.gradientScopeCount&&(this.activeTape=null));var r=new Set(this.keepTensors),o=getTensorsInContainer(e);o.forEach(function(e){return r.add(e.id)});for(var a=0;a0,"gradients() received an empty list of xs."),this.tidy("gradients",function(){var a=e();assert(a instanceof Tensor,"The result y returned by f() must be a tensor.");var i=getFilteredNodesXToY(o.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.");var s={};return s[a.id]=null==n?ones(a.shape):n,backpropagateGradients(s,i),{value:a,grads:t.map(function(e){return s[e.id]})}},!0)},e.prototype.customGrad=function(e){var t=this;return assert(isFunction(e),"The f passed in customGrad(f) must be a function."),function(){for(var n,r,o=[],a=0;a {op();...}); to avoid memory leaks.");return this.activeScope.track.push(e),e},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 URL_PROPERTIES=[{name:"DEBUG",type:Type.BOOLEAN},{name:"IS_BROWSER",type:Type.BOOLEAN},{name:"WEBGL_PAGING_ENABLED",type:Type.BOOLEAN},{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:"BACKEND",type:Type.STRING},{name:"EPSILON",type:Type.NUMBER}];function isWebGLVersionEnabled(e,t){var n;try{n=getWebGLRenderingContext(e,t);}catch(e){return !1}return null!=n&&(loseContext(n),!0)}function getWebGLDisjointQueryTimerVersion(e,t){if(0===e)return 0;var n,r=getWebGLRenderingContext(e,t);return n=hasExtension(r,"EXT_disjoint_timer_query_webgl2")&&2===e?2:hasExtension(r,"EXT_disjoint_timer_query")?1:0,null!=r&&loseContext(r),n}function isRenderToFloatTextureEnabled(e,t){if(0===e)return !1;var n=getWebGLRenderingContext(e,t);if(1===e){if(!hasExtension(n,"OES_texture_float"))return !1}else if(!hasExtension(n,"EXT_color_buffer_float"))return !1;var r=createFloatTextureAndBindToFramebuffer(n,e);return loseContext(n),r}function isDownloadFloatTextureEnabled(e,t){if(0===e)return !1;var n=getWebGLRenderingContext(e,t);if(1===e){if(!hasExtension(n,"OES_texture_float"))return !1;if(!hasExtension(n,"WEBGL_color_buffer_float"))return !1}else if(!hasExtension(n,"EXT_color_buffer_float"))return !1;var r=createFloatTextureAndBindToFramebuffer(n,e);return loseContext(n),r}function isWebGLFenceEnabled(e,t){if(2!==e)return !1;var n=getWebGLRenderingContext(e,t),r=null!=n.fenceSync;return loseContext(n),r}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)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 getWebGLRenderingContext(e,t){if(0===e||!t)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");var n=document.createElement("canvas");return 1===e?n.getContext("webgl")||n.getContext("experimental-webgl"):n.getContext("webgl2")}function loseContext(e){if(null!=e){var t=e.getExtension("WEBGL_lose_context");if(null==t)throw new Error("Extension WEBGL_lose_context not supported on this browser.");t.loseContext();}}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,this.get("IS_BROWSER"))?2:isWebGLVersionEnabled(1,this.get("IS_BROWSER"))?1:0;if("WEBGL_RENDER_FLOAT32_ENABLED"===e)return isRenderToFloatTextureEnabled(this.get("WEBGL_VERSION"),this.get("IS_BROWSER"));if("WEBGL_DOWNLOAD_FLOAT_ENABLED"===e)return isDownloadFloatTextureEnabled(this.get("WEBGL_VERSION"),this.get("IS_BROWSER"));if("WEBGL_FENCE_API_ENABLED"===e)return isWebGLFenceEnabled(this.get("WEBGL_VERSION"),this.get("IS_BROWSER"));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;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.registerBackend=function(e,t,n,r){var o=this;if(void 0===n&&(n=1),e in this.registry)return console.warn(e+" backend was already registered. Reusing existing backend"),null!=r&&r(function(){return o.engine}),!1;try{var a=t();return a.setDataMover({moveData:function(e){return o.engine.moveData(e)}}),this.registry[e]={backend:a,priority:n},!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")});}},e}();function getGlobalNamespace(){var e;if("undefined"!=typeof window)e=window;else{if("undefined"==typeof process)throw new Error("Could not find a global object");e=process;}return e}function getOrMakeEnvironment(){var e=getGlobalNamespace();return null==e.ENV&&(e.ENV=new Environment(getFeaturesFromURL()),setTensorTracker(function(){return e.ENV.engine})),e.ENV}var ENV=getOrMakeEnvironment(),environment=Object.freeze({Environment:Environment,ENV:ENV});function grad(e){return assert(isFunction(e),"The f passed in grad(f) must be a function"),function(t,n){return assert(t instanceof Tensor,"The x passed in grad(f)(x) must be a tensor"),assert(null==n||n instanceof Tensor,"The dy passed in grad(f)(x, dy) must be a tensor"),ENV.engine.tidy(function(){var r=ENV.engine.gradients(function(){return e(t)},[t],n),o=r.value,a=r.grads;return null!=n&&assertShapesMatch(o.shape,n.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),"The f passed in grads(f) must be a function"),function(t,n){return assert(Array.isArray(t)&&t.every(function(e){return e instanceof Tensor}),"The args passed in grads(f)(args) must be an array of tensors"),assert(null==n||n instanceof Tensor,"The dy passed in grads(f)(args, dy) must be a tensor"),ENV.engine.tidy(function(){var r=ENV.engine.gradients(function(){return e.apply(void 0,t)},t,n),o=r.value,a=r.grads;return null!=n&&assertShapesMatch(o.shape,n.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),"The f passed in valueAndGrad(f) must be a function"),function(t,n){assert(t instanceof Tensor,"The x passed in valueAndGrad(f)(x) must be a tensor"),assert(null==n||n instanceof Tensor,"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),"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}),"The args passed in valueAndGrads(f)(args) must be array of tensors"),assert(null==n||n instanceof Tensor,"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),"The f passed in variableGrads(f) must be a function"),assert(null==t||Array.isArray(t)&&t.every(function(e){return e instanceof Variable}),"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,"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}),"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,"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=-n&&e=0&&tt||n===e){r=!0;break}n=nearestDivisor(e,n+1);}return n}function computeOutShape$1(e,t,n){for(var r=[],o=e.length,a=0;a0?o>=c[t]:o<=c[t]);o+=r[t])n+=1;return n}),[l,h,p]}function startForAxis(e,t,n,r,o){var a=t[o];e&1<0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var i=r[o];return a<0&&(a+=i),a=clamp(0,a,i-1)}function stopForAxis(e,t,n,r,o){var a=t[o];e&1<0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var i=r[o];return a<0&&(a+=i),a=n[o]>0?clamp(0,a,i):clamp(-1,a,i-1)}function convertToTensor(e,t,n,r){if(void 0===r&&(r="float32"),r=r||"float32",e instanceof Tensor)return e;if(!isTypedArray(e)&&!Array.isArray(e)&&"number"!=typeof e&&"boolean"!=typeof e)throw new Error("Argument '"+t+"' passed to '"+n+"' must be a Tensor or TensorLike, but got "+e.constructor.name);var o=inferShape(e);return isTypedArray(e)||Array.isArray(e)||(e=[e]),Tensor.make(o,{values:toTypedArray(e,r,ENV.get("DEBUG"))},r)}function convertToTensorArray(e,t,n){if(!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)})}function op(e){var t=Object.keys(e);if(1!==t.length)throw new Error("Please provide an object with a single key (operation name) mapping to a function. Got an object with "+t.length+" keys.");var n=t[0],r=e[n];n.endsWith("_")&&(n=n.substring(0,n.length-1));var o=function(){for(var e=[],t=0;t1)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,c,i[d])>=r){p=!0;break}}if(!p&&(i.push(c),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]),l=Math.min(o[0],o[2]),c=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-l)*(d-c);if(h<=0||f<=0)return 0;var m=Math.max(a,l),g=Math.max(i,c),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=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],l=getTypedArrayFromDType(n,s*r),c=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 = 0;\n float bestValue = getA(batch, inOffset);\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 ";}}(),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=t-1-e.padInfo.top,i=n-1-e.padInfo.left,s=1/(t*n);this.userCode="\n const ivec2 pads = ivec2("+a+", "+i+");\n const float avgMultiplier = float("+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 < "+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 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 float dyValue = getDy(b, idyR, idyC, d);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n setOutput(dotProd);\n }\n ";}}();function getBroadcastDims(e,t){for(var n=e.length,r=[],o=0;o1&&1===i&&r.unshift(a);}return r}function getReductionAxes(e,t){for(var n=[],r=0;r1)&&n.unshift(a);}return n}function broadcastDimsAreOuter(e){for(var t=0;t= "+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 ";}}(),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,l=4*Math.floor(e.inChannels/4),c=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 < "+l+"; 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===c)+") {\n dotProd +=\n getX(batch, xR, xC, "+l+") *\n getW(wR, wC, "+l+", d2);\n } else if ("+(2===c)+") {\n vec2 xValues = vec2(\n getX(batch, xR, xC, "+l+"),\n getX(batch, xR, xC, "+l+" + 1)\n );\n vec2 wValues = vec2(\n getW(wR, wC, "+l+", d2),\n getW(wR, wC, "+l+" + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if ("+(3===c)+") {\n vec3 xValues = vec3(\n getX(batch, xR, xC, "+l+"),\n getX(batch, xR, xC, "+l+" + 1),\n getX(batch, xR, xC, "+l+" + 2)\n );\n vec3 wValues = vec3(\n getW(wR, wC, "+l+", d2),\n getW(wR, wC, "+l+" + 1, d2),\n getW(wR, wC, "+l+" + 2, d2)\n );\n dotProd += dot(xValues, wValues);\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,l=e.filterHeight,c=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 < "+l+"; wR++) {\n int xR = xRCorner + wR * "+s+";\n\n if (xR < 0 || xR >= "+t+") {\n continue;\n }\n\n for (int wC = 0; wC < "+c+"; 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 ";}}(),CropAndResizeProgram=function(){return function(e,t,n,r,o){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];var a=e[0],i=e[1],s=e[2],u=e[3],l=t[0],c=n[0],p=n[1];this.outputShape=[l,c,p,u];var d="bilinear"===r?1:0,h=[i-1+".0",s-1+".0"],f=h[0],m=h[1],g=c>1?[""+(i-1)/(c-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],T=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],b=T[0],S=T[1],E=T[2];this.userCode="\n const float height_ratio = float("+v+");\n const float width_ratio = float("+b+");\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 = "+S+";\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 = "+E+";\n if( in_x < 0.0 || in_x > "+m+" ) {\n setOutput(float("+o+"));\n return;\n }\n\n vec2 sourceFracIndexRC = vec2(in_y,in_x);\n if("+d+" == 1) {\n // Compute the four integer indices.\n ivec2 sourceFloorRC = ivec2(sourceFracIndexRC);\n ivec2 sourceCeilRC = ivec2(ceil(sourceFracIndexRC));\n\n float topLeft = getImage(b, sourceFloorRC.x, sourceFloorRC.y, d);\n float bottomLeft = getImage(b, sourceCeilRC.x, sourceFloorRC.y, d);\n float topRight = getImage(b, sourceFloorRC.x, sourceCeilRC.y, d);\n float bottomRight = getImage(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 setOutput(newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(floor(\n sourceFracIndexRC + vec2(0.5,0.5)));\n float newValue = getImage(b, sourceNearestRC.x, sourceNearestRC.y, d);\n setOutput(newValue);\n }\n }\n ";}}();function makeShader(e,t,n,r){var o=e.map(function(e){var t=sizeFromShape(e.shapeInfo.logicalShape);return e.shapeInfo.isUniform?"uniform float "+e.name+(t>1?"["+t+"]":"")+";":"uniform sampler2D "+e.name+";"});o=o.join("\n");var a,i=e.map(function(e){return getInputSamplingSnippet(e,t,r)}).join("\n"),s=t.texShape;return a=t.isPacked?getPackedOutputSamplingSnippet(t.logicalShape,s):getOutputSamplingSnippet(t.logicalShape,s),[SHADER_PREFIX,FLOAT_TEXTURE_SAMPLE_SNIPPET,FLOAT_TEXTURE_SETOUTPUT_SNIPPET,o,a,i,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 getInputSamplingSnippet(e,t,n){var r=getSamplerFlat(e);return r+=getSamplerFromInInfo(e),(n||arraysEqual(e.shapeInfo.logicalShape,t.logicalShape))&&(r+=getSamplerAtOutputCoords(e,t,n)),r}function getPackedOutputSamplingSnippet(e,t){switch(e.length){case 0:return getOutputScalarCoords();case 2:return getOutputPacked2DCoords(e,t);default:throw new Error(e.length+"-D output packed sampling is not yet supported")}}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")}}var SAMPLE_1D_SNIPPET="\nvec2 UVfrom1D(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}\n",SAMPLE_2D_SNIPPET="\nvec2 UVfrom2D(int texNumR, int texNumC, int numC, int row, int col) {\n int index = row * numC + col;\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",SAMPLE_3D_SNIPPET="\nvec2 UVfrom3D(int texNumR, int texNumC, int stride0,\n int stride1, int row, int col, int depth) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * stride0 + col * stride1 + depth;\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",SAMPLE_4D_SNIPPET="\nvec2 UVfrom4D(int texNumR, int texNumC, int stride0,\n int stride1, int stride2, int row, int col, int depth,\n int depth2) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * stride0 + col * stride1 + depth * stride2 + depth2;\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",SAMPLE_5D_SNIPPET="\nvec2 UVfrom5D(int texNumR, int texNumC, int stride0,\n int stride1, int stride2, int stride3, int row, int col, int depth,\n int depth2, int depth3) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * stride0 + col * stride1 +\n depth * stride2 + depth2 * stride3 + depth3;\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",SAMPLE_6D_SNIPPET="\nvec2 UVfrom6D(int texNumR, int texNumC, int stride0,\n int stride1, int stride2, int stride3, int stride4,\n int row, int col, int depth, int depth2, int depth3, int depth4) {\n // Explicitly use integer operations as dot() only works on floats.\n int index = row * stride0 + col * stride1 + depth * stride2 + depth2 *\n stride3 + depth3 * stride4 + depth4;\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",FLOAT_TEXTURE_SAMPLE_SNIPPET="\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return texture2D(textureSampler, uv).r;\n }\n",FLOAT_TEXTURE_SETOUTPUT_SNIPPET="\n void setOutput(float val) {\n gl_FragColor = vec4(val, 0, 0, 0);\n }\n",SHADER_PREFIX="\n precision highp float;\n precision highp int;\n varying vec2 resultUV;\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 bool isNaN(float val) {\n return (val < 0.0 || 0.0 < val || val == 0.0) ? false : true;\n }\n\n bool hasNaN(vec4 values) {\n vec4 v1 = values * values;\n vec4 v2 = values * values;\n return any(notEqual(v1, v2));\n }\n\n float getNaN(vec4 values) {\n return dot(vec4(1), values);\n }\n\n int round(float value) {\n return int(floor(value + 0.5));\n }\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 "+SAMPLE_4D_SNIPPET+"\n "+SAMPLE_5D_SNIPPET+"\n "+SAMPLE_6D_SNIPPET+"\n";function getOutputScalarCoords(){return "\n int getOutputCoords() {\n return 0;\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 getOutput3DCoords(e,t){var n=e[1]*e[2],r=e[2];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 int r = index / "+n+";\n index -= r * "+n+";\n int c = index / "+r+";\n int d = index - c * "+r+";\n return ivec3(r, c, d);\n }\n "}function getOutput4DCoords(e,t){var n=e[3],r=e[2]*n,o=e[1]*r;return "\n ivec4 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n\n int r = index / "+o+";\n index -= r * "+o+";\n\n int c = index / "+r+";\n index -= c * "+r+";\n\n int d = index / "+n+";\n int d2 = index - d * "+n+";\n\n return ivec4(r, c, d, d2);\n }\n "}function getOutput5DCoords(e,t){var n=e[4],r=e[3]*n,o=e[2]*r,a=e[1]*o;return "\n ivec5 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2("+t[0]+",\n "+t[1]+"));\n\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n\n int r = index / "+a+";\n index -= r * "+a+";\n\n int c = index / "+o+";\n index -= c * "+o+";\n\n int d = index / "+r+";\n index -= d * "+r+";\n\n int d2 = index / "+n+";\n int d3 = index - d2 * "+n+";\n\n ivec5 outShape = ivec5(r, c, d, d2, d3);\n return outShape;\n }\n "}function getOutput6DCoords(e,t){var n=e[5],r=e[4]*n,o=e[3]*r,a=e[2]*o,i=e[1]*a;return "\n ivec6 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n\n int r = index / "+i+";\n index -= r * "+i+";\n\n int c = index / "+a+";\n index -= c * "+a+";\n\n int d = index / "+o+";\n index -= d * "+o+";\n\n int d2 = index / "+r+";\n index -= d2 * "+r+";\n\n int d3 = index / "+n+";\n int d4 = index - d3 * "+n+";\n\n ivec6 result = ivec6(r, c, d, d2, d3, d4);\n return result;\n }\n "}function getOutputPacked2DCoords(e,t){return "\n ivec2 getOutputCoords() {\n return 2 * ivec2(resultUV.yx * vec2("+Math.ceil(t[0]/2)+", "+Math.ceil(t[1]/2)+"));\n }\n "}function getOutput2DCoords(e,t){return arraysEqual(e,t)?"\n ivec2 getOutputCoords() {\n return ivec2(resultUV.yx * vec2("+t[0]+", "+t[1]+"));\n }\n ":1===e[1]?"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n return ivec2(index, 0);\n }\n ":1===e[0]?"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n return ivec2(0, index);\n }\n ":"\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+t[0]+", "+t[1]+"));\n int index = resTexRC.x * "+t[1]+" + resTexRC.y;\n int r = index / "+e[1]+";\n int c = index - r * "+e[1]+";\n return ivec2(r, c);\n }\n "}function getSamplerScalar(e){var t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1);return e.shapeInfo.isUniform?"float "+n+"() {return "+t+";}":"\n float "+n+"() {\n return sampleTexture("+t+", halfCR);\n }\n "}function getSampler1D(e){var t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1);return "\n float "+n+"(int index) {\n return "+n+"Flat(index);\n }\n "}function getSampler2D(e){var t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),o=e.shapeInfo.texShape;if(null!=o&&arraysEqual(t,o)){var a=o[0];return "\n float "+r+"(int row, int col) {\n vec2 uv = (vec2(col, row) + halfCR) / vec2("+o[1]+".0, "+a+".0);\n return sampleTexture("+n+", uv);\n }\n "}var i=squeezeShape(t),s=i.newShape,u=i.keptDims,l=s;if(l.length=1?"coords = 0;":s.map(function(e){return "coords["+(e+u)+"] = 0;"}).join("\n"))+"\n return get"+n+"("+(a<2&&o>0?"coords":e.shapeInfo.logicalShape.map(function(e,t){return "coords["+(t+u)+"]"}).join(", "))+");\n }\n "}function getSamplerAtOutputCoords(e,t,n){var r=e.name,o=r.charAt(0).toUpperCase()+r.slice(1),a="get"+o+"AtOutCoords",i=getBroadcastDims(e.shapeInfo.logicalShape,t.logicalShape),s=e.shapeInfo.logicalShape.length,u=t.logicalShape.length,l=n&&(u>s||i.length>0),c=broadcastDimsAreOuter(i),p=e.shapeInfo.isUniform;if(l&&!c)return getBroadcastOutputCoordsSampler(e,t,o,a);var d=sizeFromShape(e.shapeInfo.logicalShape),h="";l&&c&&(h="\n int mainPart = index / "+d+";\n index -= mainPart * "+d+";\n ");var f=t.texShape;if(p)return 1===d?"float "+a+"() {return "+r+";}":"\n float "+a+"() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+f[0]+", "+f[1]+"));\n int index = resTexRC.x * "+f[1]+" + resTexRC.y;\n "+h+"\n return get"+o+"Flat(index);\n }\n ";var m=e.shapeInfo.texShape;return arraysEqual(m,f)?"\n float "+a+"() {\n return sampleTexture("+r+", resultUV);\n }\n ":"\n float "+a+"() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+f[0]+", "+f[1]+"));\n int index = resTexRC.x * "+f[1]+" + resTexRC.y;\n "+h+"\n int texR = index / "+m[1]+";\n int texC = index - texR * "+m[1]+";\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2("+m[1]+".0, "+m[0]+".0);\n\n return sampleTexture("+r+", uv);\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 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 TextureUsage,PhysicalTextureType,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"],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 gl_FragColor = encode_float(x);\n }\n ";}}(),FromPixelsProgram=function(){return function(e){this.variableNames=["A"];var t=e[0],n=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("+n+".0, "+t+".0);\n\n vec4 values = 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(e,n);this.userCode="\n void main() {\n "+o+" resRC = getOutputCoords();\n setOutput(getA("+a+"));\n }\n ";}}();function getSourceCoords(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;a= "+r);for(var o=0,a=0;a= "+r);for(var o=0,a=0;a= "+o);for(var a=getPackedMatrixTextureShapeWidthHeight(t,n),i=a[0],s=a[1],u=n%2==1,l=t%2==1,c=Math.floor(n/2),p=Math.floor(t/2),d=u?4:0,h=n,f=0,m=0;m= "+o);for(var a=n%2==1,i=t%2==1,s=Math.floor(n/2),u=Math.floor(t/2),l=getPackedMatrixTextureShapeWidthHeight(t,n),c=l[0],p=l[1],d=a?4:0,h=n+(a?1:0),f=0,m=0,g=n,v=0;vr||n>r){o="["+t+"x"+n+"]";throw new Error("Requested texture size "+o+" greater than WebGL maximum on this browser / GPU "+("["+r+"x"+r+"]")+".")}}function createFramebuffer(e){return throwIfNull(e,function(){return e.createFramebuffer()},"Unable to create WebGLFramebuffer.")}function bindVertexBufferToProgramAttribute(e,t,n,r,o,a,i){var s=e.getAttribLocation(t,n);return -1!==s&&(callAndCheck(e,function(){return e.bindBuffer(e.ARRAY_BUFFER,r)}),callAndCheck(e,function(){return e.vertexAttribPointer(s,o,e.FLOAT,!1,a,i)}),callAndCheck(e,function(){return e.enableVertexAttribArray(s)}),!0)}function bindTextureUnit(e,t,n){validateTextureUnit(e,n),callAndCheck(e,function(){return e.activeTexture(e.TEXTURE0+n)}),callAndCheck(e,function(){return e.bindTexture(e.TEXTURE_2D,t)});}function unbindTextureUnit(e,t){validateTextureUnit(e,t),callAndCheck(e,function(){return e.activeTexture(e.TEXTURE0+t)}),callAndCheck(e,function(){return e.bindTexture(e.TEXTURE_2D,null)});}function getProgramUniformLocationOrThrow(e,t,n){return throwIfNull(e,function(){return e.getUniformLocation(t,n)},'uniform "'+n+'" not present in program.')}function getProgramUniformLocation(e,t,n){return e.getUniformLocation(t,n)}function bindTextureToProgramUniformSampler(e,t,n,r,o){callAndCheck(e,function(){return bindTextureUnit(e,n,o)}),callAndCheck(e,function(){return e.uniform1i(r,o)});}function bindCanvasToFramebuffer(e){callAndCheck(e,function(){return e.bindFramebuffer(e.FRAMEBUFFER,null)}),callAndCheck(e,function(){return e.viewport(0,0,e.canvas.width,e.canvas.height)}),callAndCheck(e,function(){return e.scissor(0,0,e.canvas.width,e.canvas.height)});}function bindColorTextureToFramebuffer(e,t,n){callAndCheck(e,function(){return e.bindFramebuffer(e.FRAMEBUFFER,n)}),callAndCheck(e,function(){return e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0)});}function unbindColorTextureFromFramebuffer(e,t){callAndCheck(e,function(){return e.bindFramebuffer(e.FRAMEBUFFER,t)}),callAndCheck(e,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){var r=callAndCheck(e,function(){return t()});if(null==r)throw new Error(n);return r}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 getTextureShapeFromLogicalShape(e,t){2!==t.length&&(t=squeezeShape(t).newShape);var n=queryMaxTextureSize(e),r=sizeFromShape(t);return t.length<=1&&r<=n?[r,1]:2===t.length&&t[0]<=n&&t[1]<=n?t:3===t.length&&t[0]<=n&&t[1]*t[2]<=n?[t[0],t[1]*t[2]]:4===t.length&&t[0]<=n&&t[1]*t[2]*t[3]<=n?[t[0],t[1]*t[2]*t[3]]:sizeToSquarishShape(r)}var webgl_util=Object.freeze({createWebGLRenderingContext:createWebGLRenderingContext,createWebGLRenderingContextFromCanvas:createWebGLRenderingContextFromCanvas,callAndCheck:callAndCheck,enableDebugWebGLErrorChecking:enableDebugWebGLErrorChecking,checkWebGLError:checkWebGLError,getWebGLErrorMessage:getWebGLErrorMessage,getExtensionOrThrow:getExtensionOrThrow,createVertexShader:createVertexShader,createFragmentShader:createFragmentShader,createProgram:createProgram,linkProgram:linkProgram,validateProgram:validateProgram,createStaticVertexBuffer:createStaticVertexBuffer,createStaticIndexBuffer:createStaticIndexBuffer,queryMaxTextureSize:queryMaxTextureSize,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,getTextureShapeFromLogicalShape:getTextureShapeFromLogicalShape});function getWebGLContextAttributes(){return {alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0}}function createWebGLContext(e){var t,n=getWebGLContextAttributes();return callAndCheck(t=null!=e?createWebGLRenderingContextFromCanvas(e,n):createWebGLRenderingContext(n),function(){return t.disable(t.DEPTH_TEST)}),callAndCheck(t,function(){return t.disable(t.STENCIL_TEST)}),callAndCheck(t,function(){return t.disable(t.BLEND)}),callAndCheck(t,function(){return t.disable(t.DITHER)}),callAndCheck(t,function(){return t.disable(t.POLYGON_OFFSET_FILL)}),callAndCheck(t,function(){return t.disable(t.SAMPLE_COVERAGE)}),callAndCheck(t,function(){return t.enable(t.SCISSOR_TEST)}),callAndCheck(t,function(){return t.enable(t.CULL_FACE)}),callAndCheck(t,function(){return t.cullFace(t.BACK)}),t}function createVertexShader$1(e){return createVertexShader(e,"\n precision highp float;\n attribute vec3 clipSpacePos;\n attribute vec2 uv;\n varying vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }")}function createVertexBuffer(e){return createStaticVertexBuffer(e,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){return createStaticIndexBuffer(e,new Uint16Array([0,1,2,2,1,3]))}function getTextureConfig(e,t){var n,r,o,a,i,s,u,l=e;return 2===ENV.get("WEBGL_VERSION")?(n=l.R32F,r=l.R16F,o=l.RGBA32F,a=l.RED,i=4,s=1,u=l.HALF_FLOAT):(n=e.RGBA,r=e.RGBA,o=l.RGBA,a=e.RGBA,i=4,s=4,u=null!=t?t.HALF_FLOAT_OES:null),{internalFormatFloat:n,internalFormatHalfFloat:r,internalFormatPackedFloat:o,textureFormatFloat:a,downloadTextureFormat:e.RGBA,downloadUnpackNumChannels:i,defaultNumChannels:s,textureTypeHalfFloat:u}}function createAndConfigureTexture(e,t,n,r,o,a){validateTextureSize(e,t,n);var i=createTexture(e),s=e.TEXTURE_2D;return callAndCheck(e,function(){return e.bindTexture(s,i)}),callAndCheck(e,function(){return e.texParameteri(s,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)}),callAndCheck(e,function(){return e.texParameteri(s,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)}),callAndCheck(e,function(){return e.texParameteri(s,e.TEXTURE_MIN_FILTER,e.NEAREST)}),callAndCheck(e,function(){return e.texParameteri(s,e.TEXTURE_MAG_FILTER,e.NEAREST)}),callAndCheck(e,function(){return e.texImage2D(s,0,r,t,n,0,o,a,null)}),callAndCheck(e,function(){return e.bindTexture(e.TEXTURE_2D,null)}),i}function createFloat32MatrixTexture(e,t,n,r){var o=getUnpackedMatrixTextureShapeWidthHeight(t,n);return createAndConfigureTexture(e,o[0],o[1],r.internalFormatFloat,r.textureFormatFloat,e.FLOAT)}function createFloat16MatrixTexture(e,t,n,r){var o=getUnpackedMatrixTextureShapeWidthHeight(t,n);return createAndConfigureTexture(e,o[0],o[1],r.internalFormatFloat,r.textureFormatFloat,r.textureTypeHalfFloat)}function createUnsignedBytesMatrixTexture(e,t,n,r){var o=getUnpackedMatrixTextureShapeWidthHeight(t,n);return createAndConfigureTexture(e,o[0],o[1],e.RGBA,e.RGBA,e.UNSIGNED_BYTE)}function createPackedMatrixTexture(e,t,n,r){var o=getPackedMatrixTextureShapeWidthHeight(t,n);return createAndConfigureTexture(e,o[0],o[1],r.internalFormatPackedFloat,e.RGBA,e.FLOAT)}function bindVertexProgramAttributeStreams(e,t,n){return callAndCheck(e,function(){return e.bindBuffer(e.ARRAY_BUFFER,n)}),bindVertexBufferToProgramAttribute(e,t,"clipSpacePos",n,3,20,0)&&bindVertexBufferToProgramAttribute(e,t,"uv",n,2,20,12)}function uploadPixelDataToTexture(e,t,n){callAndCheck(e,function(){return e.bindTexture(e.TEXTURE_2D,t)}),callAndCheck(e,function(){return e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n)}),callAndCheck(e,function(){return e.bindTexture(e.TEXTURE_2D,null)});}function uploadDataToTexture(e,t,n,r,o,a){validateTextureSize(e,n,r),callAndCheck(e,function(){return e.bindTexture(e.TEXTURE_2D,t)}),callAndCheck(e,function(){return e.texSubImage2D(e.TEXTURE_2D,0,0,0,n,r,a,e.FLOAT,o)}),callAndCheck(e,function(){return e.bindTexture(e.TEXTURE_2D,null)});}function uploadMatrixToTexture(e,t,n,r,o,a,i){var s,u=getUnpackedMatrixTextureShapeWidthHeight(n,r),l=u[0],c=u[1];1===i.defaultNumChannels?s=o:encodeMatrixToUnpackedArray(o,s=new Float32Array(getUnpackedArraySizeFromMatrixSize(o.length,a)),a),uploadDataToTexture(e,t,l,c,s,i.textureFormatFloat);}function uploadMatrixToPackedTexture(e,t,n,r,o,a){var i=getPackedMatrixTextureShapeWidthHeight(n,r),s=i[0],u=i[1],l=new Float32Array(getPackedRGBAArraySizeFromMatrixShape(n,r));encodeMatrixToPackedRGBA(o,n,r,l),uploadDataToTexture(e,t,s,u,l,e.RGBA);}function maybeCreateBufferFromOutputTexture(e,t,n,r,o){var a=t;if(2===ENV.get("WEBGL_VERSION")){var i=e,s=i.createBuffer();callAndCheck(e,function(){return e.bindBuffer(i.PIXEL_PACK_BUFFER,s)});var u=4*getUnpackedArraySizeFromMatrixSize(n*r,o.downloadUnpackNumChannels);callAndCheck(e,function(){return e.bufferData(i.PIXEL_PACK_BUFFER,u,e.STATIC_DRAW)}),callAndCheck(e,function(){return i.readPixels(0,0,r,n,e.RGBA,e.FLOAT,0)}),callAndCheck(e,function(){return e.bindBuffer(i.PIXEL_PACK_BUFFER,null)}),a=s;}return a}function downloadFloat32MatrixFromBuffer(e,t,n,r,o){var a=e,i=new Float32Array(getUnpackedArraySizeFromMatrixSize(n*r,o.downloadUnpackNumChannels));a.bindBuffer(e.ARRAY_BUFFER,t),a.getBufferSubData(e.ARRAY_BUFFER,0,i),a.bindBuffer(e.ARRAY_BUFFER,null);var s=new Float32Array(n*r);return decodeMatrixFromUnpackedArray(i,s,o.downloadUnpackNumChannels),s}function downloadFloat32MatrixFromOutputTexture(e,t,n,r){var o=getUnpackedMatrixTextureShapeWidthHeight(t,n),a=o[0],i=o[1],s=new Float32Array(getUnpackedArraySizeFromMatrixSize(t*n,r.downloadUnpackNumChannels));callAndCheck(e,function(){return e.readPixels(0,0,a,i,r.downloadTextureFormat,e.FLOAT,s)});var u=new Float32Array(t*n);return decodeMatrixFromUnpackedArray(s,u,r.downloadUnpackNumChannels),u}function downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n,r){var o=getUnpackedMatrixTextureShapeWidthHeight(t,n),a=o[0],i=o[1],s=new Uint8Array(getUnpackedArraySizeFromMatrixSize(t*n,4));return callAndCheck(e,function(){return e.readPixels(0,0,a,i,r.downloadTextureFormat,e.UNSIGNED_BYTE,s)}),new Float32Array(s.buffer)}function downloadMatrixFromPackedOutputTexture(e,t,n,r){var o=getPackedMatrixTextureShapeWidthHeight(t,n),a=o[0],i=o[1],s=new Float32Array(getPackedRGBAArraySizeFromMatrixShape(t,n));callAndCheck(e,function(){return e.readPixels(0,0,a,i,e.RGBA,e.FLOAT,s)});var u=new Float32Array(t*n);return decodeMatrixFromPackedRGBA(s,t,n,u)}var gpgpu_util=Object.freeze({getWebGLContextAttributes:getWebGLContextAttributes,createWebGLContext:createWebGLContext,createVertexShader:createVertexShader$1,createVertexBuffer:createVertexBuffer,createIndexBuffer:createIndexBuffer,getTextureConfig:getTextureConfig,createFloat32MatrixTexture:createFloat32MatrixTexture,createFloat16MatrixTexture:createFloat16MatrixTexture,createUnsignedBytesMatrixTexture:createUnsignedBytesMatrixTexture,createPackedMatrixTexture:createPackedMatrixTexture,bindVertexProgramAttributeStreams:bindVertexProgramAttributeStreams,uploadPixelDataToTexture:uploadPixelDataToTexture,uploadMatrixToTexture:uploadMatrixToTexture,uploadMatrixToPackedTexture:uploadMatrixToPackedTexture,maybeCreateBufferFromOutputTexture:maybeCreateBufferFromOutputTexture,downloadFloat32MatrixFromBuffer:downloadFloat32MatrixFromBuffer,downloadFloat32MatrixFromOutputTexture:downloadFloat32MatrixFromOutputTexture,downloadByteEncodedFloatMatrixFromOutputTexture:downloadByteEncodedFloatMatrixFromOutputTexture,downloadMatrixFromPackedOutputTexture:downloadMatrixFromPackedOutputTexture}),GPGPUContext=function(){function e(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.autoDebugValidate=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[],this.gl=null!=e?e:createWebGLContext(),1===ENV.get("WEBGL_VERSION")?(this.textureFloatExtension=getExtensionOrThrow(this.gl,"OES_texture_float"),this.colorBufferFloatExtension=this.gl.getExtension("WEBGL_color_buffer_float"),ENV.get("WEBGL_RENDER_FLOAT32_ENABLED")||(this.textureHalfFloatExtension=getExtensionOrThrow(this.gl,"OES_texture_half_float"),this.colorBufferHalfFloatExtension=this.gl.getExtension("EXT_color_buffer_half_float"))):this.colorBufferFloatExtension=getExtensionOrThrow(this.gl,"EXT_color_buffer_float"),this.loseContextExtension=getExtensionOrThrow(this.gl,"WEBGL_lose_context"),this.vertexBuffer=createVertexBuffer(this.gl),this.indexBuffer=createIndexBuffer(this.gl),this.framebuffer=createFramebuffer(this.gl),this.textureConfig=getTextureConfig(this.gl,this.textureHalfFloatExtension);}return 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,function(){return t.finish()}),callAndCheck(t,function(){return t.bindFramebuffer(t.FRAMEBUFFER,null)}),callAndCheck(t,function(){return t.deleteFramebuffer(e.framebuffer)}),callAndCheck(t,function(){return t.bindBuffer(t.ARRAY_BUFFER,null)}),callAndCheck(t,function(){return t.deleteBuffer(e.vertexBuffer)}),callAndCheck(t,function(){return t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)}),callAndCheck(t,function(){return t.deleteBuffer(e.indexBuffer)}),this.loseContextExtension.loseContext(),this.disposed=!0;}},e.prototype.enableAutomaticDebugValidation=function(e){this.autoDebugValidate=e,enableDebugWebGLErrorChecking(e);},e.prototype.createFloat32MatrixTexture=function(e,t){return this.throwIfDisposed(),createFloat32MatrixTexture(this.gl,e,t,this.textureConfig)},e.prototype.createFloat16MatrixTexture=function(e,t){return this.throwIfDisposed(),createFloat16MatrixTexture(this.gl,e,t,this.textureConfig)},e.prototype.createUnsignedBytesMatrixTexture=function(e,t){return this.throwIfDisposed(),createUnsignedBytesMatrixTexture(this.gl,e,t,this.textureConfig)},e.prototype.uploadPixelDataToTexture=function(e,t){this.throwIfDisposed(),uploadPixelDataToTexture(this.gl,e,t);},e.prototype.createPackedMatrixTexture=function(e,t){return this.throwIfDisposed(),createPackedMatrixTexture(this.gl,e,t,this.textureConfig)},e.prototype.deleteMatrixTexture=function(e){var t=this;this.throwIfDisposed(),this.outputTexture===e&&(unbindColorTextureFromFramebuffer(this.gl,this.framebuffer),this.outputTexture=null),callAndCheck(this.gl,function(){return t.gl.deleteTexture(e)});},e.prototype.uploadMatrixToTexture=function(e,t,n,r){this.throwIfDisposed();var o=getNumChannels();return uploadMatrixToTexture(this.gl,e,t,n,r,o,this.textureConfig)},e.prototype.uploadMatrixToPackedTexture=function(e,t,n,r){return this.throwIfDisposed(),uploadMatrixToPackedTexture(this.gl,e,t,n,r,this.textureConfig)},e.prototype.downloadFloat32MatrixFromOutputTexture=function(e,t,n){var r=this;return this.downloadMatrixDriver(e,function(){return downloadFloat32MatrixFromOutputTexture(r.gl,t,n,r.textureConfig)})},e.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(e,t,n){var r=this;return this.downloadMatrixDriver(e,function(){return downloadByteEncodedFloatMatrixFromOutputTexture(r.gl,t,n,r.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,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){var r=this;return this.downloadMatrixDriver(e,function(){return downloadMatrixFromPackedOutputTexture(r.gl,t,n,r.textureConfig)})},e.prototype.createProgram=function(e){this.throwIfDisposed();var t=this.gl,n=createFragmentShader(t,e),r=createVertexShader$1(t),o=createProgram(t);return callAndCheck(t,function(){return t.attachShader(o,r)}),callAndCheck(t,function(){return t.attachShader(o,n)}),linkProgram(t,o),this.autoDebugValidate&&validateProgram(t,o),this.vertexAttrsAreBound||(this.setProgram(o),this.vertexAttrsAreBound=bindVertexProgramAttributeStreams(t,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,function(){return t.gl.deleteProgram(e)});},e.prototype.setProgram=function(e){var t=this;this.throwIfDisposed(),this.program=e,null!=this.program&&this.autoDebugValidate&&validateProgram(this.gl,this.program),callAndCheck(this.gl,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,e,t):getProgramUniformLocation(this.gl,e,t)},e.prototype.getAttributeLocation=function(e,t){var n=this;return this.throwIfDisposed(),callAndCheck(this.gl,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.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.program),validateFramebuffer(this.gl);},e.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var e=this.gl;this.autoDebugValidate&&this.debugValidate(),callAndCheck(e,function(){return e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0)});},e.prototype.blockUntilAllProgramsCompleted=function(){var e=this;this.throwIfDisposed(),callAndCheck(this.gl,function(){return e.gl.finish()});},e.prototype.getQueryTimerExtension=function(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=getExtensionOrThrow(this.gl,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.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=binSearchLastTrue(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,e,this.framebuffer),this.autoDebugValidate&&validateFramebuffer(this.gl);},e.prototype.unbindTextureToFrameBuffer=function(){null!=this.outputTexture?(bindColorTextureToFramebuffer(this.gl,this.outputTexture,this.framebuffer),this.autoDebugValidate&&validateFramebuffer(this.gl)):unbindColorTextureFromFramebuffer(this.gl,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,e,this.framebuffer),this.autoDebugValidate&&validateFramebuffer(r),this.outputTexture=e,callAndCheck(r,function(){return r.viewport(0,0,t,n)}),callAndCheck(r,function(){return r.scissor(0,0,t,n)});},e.prototype.setOutputMatrixWriteRegionDriver=function(e,t,n,r){var o=this;this.throwIfDisposed(),callAndCheck(this.gl,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 binSearchLastTrue(e){for(var t=0,n=e.length-1,r=-1;t<=n;){var o=t+n>>1;e[o]()?(r=o,t=o+1):n=o-1;}return r}function compileProgram(e,t,n,r){for(var o=t.userCode,a=n.map(function(e,n){var r={logicalShape:e.shape,texShape:e.isUniform?null:e.texData.texShape,isUniform:e.isUniform,isPacked:!e.isUniform&&e.texData.usage===TextureUsage.PACK};return {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.usage===TextureUsage.PACK},u=makeShader(a,s,o,!0===t.supportsBroadcasting),l=e.createProgram(u),c={},p=0;p= 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.filterHeight,n=e.filterWidth,r=e.strideHeight,o=e.strideWidth,a=t-1-e.padInfo.top,i=n-1-e.padInfo.left,s=t*n-1;this.userCode="\n const ivec2 pads = ivec2("+a+", "+i+");\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 < "+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 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 float dyValue = getDy(b, idyR, idyC, d);\n int maxPosValue = "+s+" - 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 * "+n+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n ";}}(),MatMulProgram=function(){return function(e,t,n,r){void 0===n&&(n=!1),void 0===r&&(r=!1),this.variableNames=["matrixA","matrixB"];var o=e[0],a=n?e[2]:e[1],i=r?t[1]:t[2],s=n?e[1]:e[2];this.outputShape=[o,a,i];var u=function(e,t){return n?"batch, "+t+" + "+e+", aRow":"batch, aRow, "+t+" + "+e},l=function(e,t){return r?"batch, bCol, "+t+" + "+e:"batch, "+t+" + "+e+", bCol"},c=4*Math.floor(s/4),p=s%4;this.userCode=" float dotARowBCol(int batch, int aRow, int bCol) {\n float result = 0.0;\n for (int i = 0; i < "+c+"; i += 4) {\n vec4 a = vec4(\n getMatrixA("+u(0,"i")+"),\n getMatrixA("+u(1,"i")+"),\n getMatrixA("+u(2,"i")+"),\n getMatrixA("+u(3,"i")+")\n );\n vec4 b = vec4(\n getMatrixB("+l(0,"i")+"),\n getMatrixB("+l(1,"i")+"),\n getMatrixB("+l(2,"i")+"),\n getMatrixB("+l(3,"i")+")\n );\n\n result += dot(a, b);\n }\n\n if ("+(1===p)+") {\n result += getMatrixA("+u(0,c)+") *\n getMatrixB("+l(0,c)+");\n } else if ("+(2===p)+") {\n vec2 a = vec2(\n getMatrixA("+u(0,c)+"),\n getMatrixA("+u(1,c)+")\n );\n vec2 b = vec2(\n getMatrixB("+l(0,c)+"),\n getMatrixB("+l(1,c)+")\n );\n result += dot(a, b);\n } else if ("+(3===p)+") {\n vec3 a = vec3(\n getMatrixA("+u(0,c)+"),\n getMatrixA("+u(1,c)+"),\n getMatrixA("+u(2,c)+")\n );\n vec3 b = vec3(\n getMatrixB("+l(0,c)+"),\n getMatrixB("+l(1,c)+"),\n getMatrixB("+l(2,c)+")\n );\n result += dot(a, b);\n }\n\n return result;\n }\n\n void main() {\n ivec3 resBRC = getOutputCoords();\n setOutput(dotARowBCol(resBRC.x, resBRC.y, resBRC.z));\n }\n ";}}(),MatMulPackedProgram=function(){return function(e,t,n,r,o){void 0===r&&(r=!1),void 0===o&&(o=!1),this.variableNames=["matrixA","matrixB"],this.outputShape=n;var a=r?e[0]:e[1],i=Math.ceil(a/2),s=r?"resultUV.t, center":"center, resultUV.t",u=o?"center, resultUV.s":"resultUV.s, center",l=r?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],c=o?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"];this.userCode="\n const float sharedDimension = "+i+".0;\n\n vec4 dot2x2ARowBCol() {\n vec4 result = vec4(0);\n for (int ii = 0; ii < "+i+"; ii++) {\n float i = float(ii);\n float center = (i + 0.5) / sharedDimension;\n vec4 a = texture2D(matrixA, vec2("+s+"));\n vec4 b = texture2D(matrixB, vec2("+u+"));\n\n result += ("+l[0]+" * "+c[0]+") + ("+l[1]+" * "+c[1]+");\n }\n return result;\n }\n\n void main() {\n gl_FragColor = dot2x2ARowBCol();\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.outputShape=e,this.userCode="\n void main() {\n ivec2 rc = getOutputCoords();\n\n int r = rc.x;\n int c = rc.y;\n int rp1 = r + 1;\n int cp1 = c + 1;\n\n bool cEdge = cp1 >= "+e[1]+";\n bool rEdge = rp1 >= "+e[0]+";\n\n gl_FragColor = vec4(\n getA(r, c),\n cEdge ? 0. : getA(r, cp1),\n rEdge ? 0. : getA(rp1, c),\n rEdge || cEdge ? 0. : getA(rp1, cp1)\n );\n }\n ";}}(),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 ";}}(),Pool2DProgram=function(){return function(e,t,n){if(this.variableNames=["x"],"avg"===t&&n)throw new Error("Cannot compute positions for average pool.");var r=e.filterHeight,o=e.filterWidth,a=e.strideHeight,i=e.strideWidth,s=e.padInfo.top,u=e.padInfo.left;this.outputShape=e.outShape;var l="avg"===t,c="0.0";if(l||(c="-1.0 / 0.0"),n)this.userCode="\n const ivec2 strides = ivec2("+a+", "+i+");\n const ivec2 pads = ivec2("+s+", "+u+");\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 float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n float avgValue = 0.0;\n\n for (int wR = 0; wR < "+r+"; wR++) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+e.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+o+"; wC++) {\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 * "+o+" + wC;\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var p=t+"("+t+"("+t+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===t&&(p="avgValue / count");var d=4*Math.floor(o/4),h=o%4,f="\n if ("+l+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec2 strides = ivec2("+a+", "+i+");\n const ivec2 pads = ivec2("+s+", "+u+");\n const float initializationValue = "+c+";\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("+c+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < "+r+"; wR++) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+e.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+d+"; wC += 4) {\n int xC = xCCorner + wC;\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + 1, d),\n getValue(batch, xR, xC + 2, d),\n getValue(batch, xR, xC + 3, d)\n );\n\n "+f+"\n }\n\n int xC = xCCorner + "+d+";\n if ("+(1===h)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+f+"\n } else if ("+(2===h)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + 1, d),\n initializationValue,\n initializationValue\n );\n\n "+f+"\n } else if ("+(3===h)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + 1, d),\n getValue(batch, xR, xC + 2, d),\n initializationValue\n );\n\n "+f+"\n }\n }\n setOutput("+p+");\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="";"min"===t?(i="1.0 / 0.0",s="min"):"max"===t&&(i="-1.0 / 0.0",s="max");var u=t+"("+t+"("+t+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"sum"===t?u="sumValue":"all"===t?u="allValue":"any"===t&&(u="anyValue");var l=4*Math.floor(n/4),c=n%4,p="\n if ("+("sum"===t)+") {\n sumValue += dot(values, ones);\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 sumValue = 0.0;\n float allValue = 1.0;\n float anyValue = 0.0;\n\n for (int i = 0; i < "+l+"; 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 + "+l+";\n if ("+(1===c)+") {\n "+d+" values = "+d+"(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+p+"\n } else if ("+(2===c)+") {\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===c)+") {\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 ";}}(),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],l=[n&&s>1?o-1:o,n&&u>1?a-1:a],c=[n&&s>1?s-1:s,n&&u>1?u-1:u],p=l[0]/c[0],d=l[1]/c[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],l=[r&&t>1?t-1:t,r&&n>1?n-1:n];this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/l[0]+",\n "+u[1]/l[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 ";}}(),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],l=[n&&s>1?o-1:o,n&&u>1?a-1:a],c=[n&&s>1?s-1:s,n&&u>1?u-1:u],p=l[0]/c[0],d=l[1]/c[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("+l[0]+") *\n (float(dyR) / float("+c[0]+"));\n\n float sourceFracCol =\n float("+l[1]+") *\n (float(dyC) / float("+c[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],l=[r&&t>1?t-1:t,r&&n>1?n-1:n],c=r?"0.5":"0.0";this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/l[0]+",\n "+u[1]/l[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 + "+c+")));\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 ";}}(),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,l="\n sumValue += dot(values, filter);\n ",c="";o%n>0&&(c="\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 "+c+"\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 filter = 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 "+l+"\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 filter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n 0,\n 0,\n 0\n );\n\n "+l+"\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 filter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n 0,\n 0\n );\n\n "+l+"\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 filter = 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 "+l+"\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=getCoordsDataType(this.rank),n=getCoords$1(this.rank);this.userCode="\n uniform "+t+" start;\n\n void main() {\n "+t+" sourceLoc = start + getOutputCoords();\n setOutput(getSource("+n+"));\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){if(null!=t.startLoc||(t.startLoc=n.getUniformLocationNoThrow(r,"start"),null!=t.startLoc))if(1===t.rank)n.gl.uniform1i(t.startLoc,e[0]);else if(2===t.rank)n.gl.uniform2i(t.startLoc,e[0],e[1]);else if(3===t.rank)n.gl.uniform3i(t.startLoc,e[0],e[1],e[2]);else{if(4!==t.rank)throw Error("Slicing for rank "+t.rank+" is not yet supported");n.gl.uniform4i(t.startLoc,e[0],e[1],e[2],e[3]);}}},e}();function getCoords$1(e){if(1===e)return "sourceLoc";if(2===e)return "sourceLoc.x, sourceLoc.y";if(3===e)return "sourceLoc.x, sourceLoc.y, sourceLoc.z";if(4===e)return "sourceLoc.x, sourceLoc.y, sourceLoc.z, sourceLoc.w";throw Error("Slicing for rank "+e+" is not yet supported")}var 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 l=0;u=n.map(function(e,t){return -1===r.indexOf(t)?(l++,1===o.length?"coords * strides["+t+"] + begin["+t+"]":"coords["+(l-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){var n,r=getPhysicalFromLogicalTextureType(t),o=getKeyFromTextureShape(e,r);if(o in this.freeTextures||(this.freeTextures[o]=[]),o in this.usedTextures||(this.usedTextures[o]=[]),this.freeTextures[o].length>0){this.numFreeTextures--,this.numUsedTextures++,this.log();var a=this.freeTextures[o].shift();return this.usedTextures[o].push(a),a}return this.numUsedTextures++,this.log(),r===PhysicalTextureType.PACKED_2X2_FLOAT32?n=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):r===PhysicalTextureType.UNPACKED_FLOAT32?n=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):r===PhysicalTextureType.UNPACKED_FLOAT16?n=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):r===PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE&&(n=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[o].push(n),n},e.prototype.releaseTexture=function(e,t,n){if(null!=this.freeTextures){var r=getKeyFromTextureShape(t,getPhysicalFromLogicalTextureType(n));r in this.freeTextures||(this.freeTextures[r]=[]),this.freeTextures[r].push(e),this.numFreeTextures++,this.numUsedTextures--;var o=this.usedTextures[r],a=o.indexOf(e);if(a<0)throw new Error("Cannot release a texture that was never provided by this texture manager");o.splice(a,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){if(e===TextureUsage.DOWNLOAD||e===TextureUsage.PIXELS)return PhysicalTextureType.PACKED_4X1_UNSIGNED_BYTE;if(e===TextureUsage.UPLOAD)return PhysicalTextureType.UNPACKED_FLOAT32;if(e===TextureUsage.RENDER)return ENV.get("WEBGL_RENDER_FLOAT32_ENABLED")?PhysicalTextureType.UNPACKED_FLOAT32:PhysicalTextureType.UNPACKED_FLOAT16;if(e===TextureUsage.PACK)return PhysicalTextureType.PACKED_2X2_FLOAT32;throw new Error("Unknown logical texture type "+e)}function getKeyFromTextureShape(e,t){return e[0]+"_"+e[1]+"_"+t}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;o= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n";function STEP(e){return void 0===e&&(e=0),CHECK_NAN_SNIPPET$1+"\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",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$1+"\n return sin(x);\n",COS=CHECK_NAN_SNIPPET$1+"\n return cos(x);\n",TAN="return tan(x);",ASIN="return asin(x);",ACOS="return acos(x);",ATAN=CHECK_NAN_SNIPPET$1+"\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$1+"\n if (x < 1.0) return NAN;\n return log(x + sqrt(x * x - 1.0));",ATANH=CHECK_NAN_SNIPPET$1+"\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));",UnpackProgram=function(){return function(e){this.variableNames=["A"],this.outputShape=e,this.userCode="\n const vec2 onePixel = 1. / vec2("+e[1]+", "+e[0]+");\n\n void main() {\n ivec2 rc = getOutputCoords();\n vec2 modCoord = mod(vec2(rc.y, rc.x), 2.);\n\n vec4 packedInput = texture2D(A,\n resultUV - step(1., modCoord) * onePixel);\n\n setOutput(\n modCoord.x == 0. ?\n (modCoord.y == 0. ? packedInput.r : packedInput.b) :\n (modCoord.y == 0. ? packedInput.g : packedInput.a)\n );\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,"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,"Number of splits must evenly divide the axis."),r=Array(t).fill(o.shape[n]/t)):(assert(o.shape[n]===t.reduce(function(e,t){return e+t}),"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),l=n.pow(2,52),c=2*l,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=c;)e/=2,t/=2,n>>>=1;return (e+n)/t};return T.int32=function(){return 0|x.g(4)},T.quick=function(){return x.g(4)/4294967296},T.double=T,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})(T,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");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){void 0===n&&(n=1),void 0===r&&(r=0);var o=convertToTensor(e,"indices","oneHot","int32");if(assert("int32"===o.dtype,"Indices must be of dtype `int32`"),t<2)throw new Error("Error in oneHot: depth must be >=2, but it is "+t);return ENV.engine.runKernel(function(e){return e.oneHot(o,t,n,r)},{$indices:o},function(e){return {$indices:function(){return zerosLike(o)}}})}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,l,c,p,d,h,f,m,g,v,y,x,T,b;return __generator(this,function(S){switch(S.label){case 0:if(2!==(n=convertToTensor(e,"img","toPixels","int32")).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 l=S.sent()[0],[4,u.data()];case 2:if(c=S.sent()[0],s.dispose(),u.dispose(),"float32"===n.dtype){if(l<0||c>1)throw new Error("Tensor values for a float32 Tensor must be in the range [0 - 1] but got range ["+l+" - "+c+"].")}else{if("int32"!==n.dtype)throw new Error("Unsupported type for toPixels: "+n.dtype+". Please use float32 or int32 tensors.");if(l<0||c>255)throw new Error("Tensor values for a int32 Tensor must be in the range [0 - 255] but got range ["+l+" - "+c+"].")}return [4,n.data()];case 3:for(p=S.sent(),d="float32"===n.dtype?255:1,h=new Uint8ClampedArray(a*o*4),f=0;f=1,"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,"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,"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,"input rank should be > than [blockShape] but got "+r.rank),assert(n.length===t.length,"crops.shape[0] must be equal to [blockShape] but got "+n.length),assert(r.shape[0]%o==0,"input tensor batch must be divisible by prod( blockShape )");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,"input rank "+r.rank+" should be > than [blockShape] "+t.length),assert(n.length===t.length,"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),"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);for(var n,r=convertToTensor(e,"x","unstack"),o=r.shape[t],a=Array(r.rank-1).fill(0),i=0,s=0;s=0,"Negative dimension size caused by overflow when multiplying\n "+o+" and "+t+" for depthToSpace with input shape\n "+r.shape),assert(a*t>=0,"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,"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 buffer(e,t,n){return void 0===t&&(t="float32"),new TensorBuffer(e,t,n)}function print(e,t){void 0===t&&(t=!1),console.log(e.toString(t));}var batchToSpaceND=op({batchToSpaceND_:batchToSpaceND_}),cast=op({cast_:cast_}),clone=op({clone_:clone_}),cumsum=op({cumsum_:cumsum_}),depthToSpace=op({depthToSpace_:depthToSpace_}),expandDims=op({expandDims_:expandDims_}),eye=op({eye_:eye_}),fromPixels=op({fromPixels_:fromPixels_}),multinomial=op({multinomial_:multinomial_}),oneHot=op({oneHot_:oneHot_}),pad=op({pad_:pad_}),pad1d=op({pad1d_:pad1d_}),pad2d=op({pad2d_:pad2d_}),pad3d=op({pad3d_:pad3d_}),pad4d=op({pad4d_:pad4d_}),rand=op({rand_:rand_}),randomNormal=op({randomNormal_:randomNormal_}),randomUniform=op({randomUniform_:randomUniform_}),reshape=op({reshape_:reshape_}),spaceToBatchND=op({spaceToBatchND_:spaceToBatchND_}),squeeze=op({squeeze_:squeeze_}),stack=op({stack_:stack_}),tile=op({tile_:tile_}),truncatedNormal=op({truncatedNormal_:truncatedNormal_}),unstack=op({unstack_:unstack_});function whereImpl(e,t){for(var n=[],r=0;r0?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.texShape,o=t.usage,a=t.complexTensors;null!=n&&this.releaseTexture(e,n,r,o),null!=a&&(a.real.dispose(),a.imag.dispose()),this.texData.delete(e);}},e.prototype.getTexture=function(e){return this.uploadToGPU(e),this.texData.get(e).texture},e.prototype.getGPGPUContext=function(){return this.gpgpu},e.prototype.getCanvas=function(){return this.canvas},e.prototype.complex=function(e,t){var n=this.makeOutputArray(e.shape,"complex64");return this.texData.get(n.dataId).complexTensors={real:ENV.engine.keep(e.clone()),imag:ENV.engine.keep(t.clone())},n},e.prototype.real=function(e){return this.texData.get(e.dataId).complexTensors.real.clone()},e.prototype.imag=function(e){return this.texData.get(e.dataId).complexTensors.imag.clone()},e.prototype.slice=function(e,t,n){var r=new SliceProgram(n),o=r.getCustomSetupFunc(t);return this.compileAndRun(r,[e],null,o)},e.prototype.stridedSlice=function(e,t,n,r,o,a,i,s,u){var l=getStridedSlicedInfo(e.shape,t,n,r,o,a,i,s,u),c=l[0],p=l[1],d=l[2],h=p.filter(function(e,t){return -1===d.indexOf(t)});if(h.some(function(e){return 0===e}))return tensor([],h);var f=new StridedSliceProgram(c,r,p,d);return this.compileAndRun(f,[e])},e.prototype.reverse=function(e,t){var n=new ReverseProgram(e.shape,t);return this.compileAndRun(n,[e])},e.prototype.concat2Tensors=function(e,t,n){var r=computeOutShape([e.shape,t.shape],n),o=e.as2D(-1,sizeFromShape(e.shape.slice(n))),a=t.as2D(-1,sizeFromShape(t.shape.slice(n))),i=new ConcatProgram(o.shape,a.shape);return this.compileAndRun(i,[o,a]).reshape(r)},e.prototype.concat=function(e,t){if(1===e.length)return e[0];for(var n=e[0],r=1;r 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,"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;a1,"blockSize should be > 1 for depthToSpace, but was: "+t);var r=e.shape[0],o=("NHWC"===n?e.shape[1]:e.shape[2])*t,a=("NHWC"===n?e.shape[2]:e.shape[3])*t,i=("NHWC"===n?e.shape[3]:e.shape[1])/(t*t),s=new DepthToSpaceProgram("NHWC"===n?[r,o,a,i]:[r,i,o,a],t,n);return this.compileAndRun(s,[e])},e.prototype.split=function(e,t,n){return split(e,t,n)},e.prototype.makeOutputArray=function(e,t){return Tensor.make(e,{},t)},e.prototype.compileAndRun=function(e,t,n,r,o){var a=this;if(void 0===o&&(o=!0),null==n&&(n=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(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 t=a.texData.get(e.dataId);return null==t.texture&&sizeFromShape(e.shape)<=SIZE_UPLOAD_UNIFORM?{shape:e.shape,texData:null,isUniform:!0,uniformValues:a.readSync(e.dataId)}:(a.uploadToGPU(e.dataId),{shape:e.shape,texData:t,isUniform:!1})});this.uploadToGPU(n.dataId);var s,u={shape:n.shape,texData:this.texData.get(n.dataId),isUniform:!1},l=makeShaderKey(e,i,u),c=this.getAndSaveBinary(l,function(){return compileProgram(a.gpgpu,e,i,u)}),p=null!=this.activeTimers;if(p&&(s=this.startTimer()),runProgram(c,i,u,r),ENV.get("WEBGL_PAGING_ENABLED")&&o&&this.numBytesInGPU>this.NUM_BYTES_BEFORE_PAGING)for(var d=this.numBytesInGPU-this.NUM_BYTES_BEFORE_PAGING;d>0&&this.lruDataGPU.length>0;){var h=this.lruDataGPU.shift(),f=this.texData.get(h),m=f.shape,g=f.dtype;d-=this.computeBytes(m,g),this.read(h);}return p&&(s=this.endTimer(s),this.activeTimers.push(this.getQueryTime(s))),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(){if(!this.disposed){for(var e in this.binaryCache)this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram);this.textureManager.dispose(),this.canvas.remove(),null!=this.fromPixelsCanvas&&this.fromPixelsCanvas.remove(),this.gpgpuCreatedLocally&&this.gpgpu.dispose(),this.disposed=!0;}},e.prototype.floatPrecision=function(){var e=this;return tidy(function(){return e.abs(scalar(1e-8)).get()>0?32:16})},e.prototype.uploadToGPU=function(e){var t=this.texData.get(e),n=t.shape,r=t.values,o=t.texture,a=t.dtype,i=t.usage;if(ENV.get("WEBGL_PAGING_ENABLED")&&null!=o){this.lruDataGPU.indexOf(e)>=0&&(this.lruDataGPU.splice(this.lruDataGPU.indexOf(e),1),this.lruDataGPU.push(e));}else{var s,u=null!=this.activeTimers;u&&(s=performance.now());var l=getTextureShapeFromLogicalShape(this.gpgpu.gl,n);t.texShape=l;var c=this.acquireTexture(e,l,i);t.texture=c,null!=r&&(this.gpgpu.uploadMatrixToTexture(c,l[0],l[1],typedArrayToFloat32(r,a)),t.values=null,u&&(this.uploadWaitMs+=performance.now()-s));}},e.prototype.cacheOnCPU=function(e,t){var n=this.delayedStorage,r=this.texData.get(e),o=r.texture,a=r.texShape,i=r.dtype,s=r.usage;n&&null!=o&&(this.releaseTexture(e,o,a,s),r.texture=null,r.texShape=null),r.usage=TextureUsage.UPLOAD,null!=t&&(r.values=float32ToTypedArray(t,i));},e.prototype.releaseTexture=function(e,t,n,r){var o=this.texData.get(e),a=o.shape,i=o.dtype;if(ENV.get("WEBGL_PAGING_ENABLED")){var s=this.lruDataGPU.indexOf(e);s>=0&&this.lruDataGPU.splice(s,1);}this.numBytesInGPU-=this.computeBytes(a,i),this.textureManager.releaseTexture(t,n,r);},e.prototype.acquireTexture=function(e,t,n){var r=this.texData.get(e),o=r.shape,a=r.dtype;return ENV.get("WEBGL_PAGING_ENABLED")&&this.lruDataGPU.push(e),this.numBytesInGPU+=this.computeBytes(o,a),this.textureManager.acquireTexture(t,n)},e.prototype.computeBytes=function(e,t){return sizeFromShape(e)*bytesPerElement(t)},e}();function float32ToTypedArray(e,t){if("float32"===t||"complex64"===t)return e;if("int32"===t||"bool"===t){for(var n="int32"===t?new Int32Array(e.length):new Uint8Array(e.length),r=0;r=2&&a.rank>=2&&o.rank===a.rank,"Error in matMul: inputs must have the same rank of at least 2, got ranks "+o.rank+" and "+a.rank+"."),assert(arraysEqual(c,p),"Error in matMul: outer dimensions ("+c+") and ("+p+") of Tensors with shapes "+o.shape+" and "+a.shape+" must match."),assert(i===s,"Error in matMul: inner shapes ("+i+") and ("+s+") of Tensors with shapes "+o.shape+" and "+a.shape+" and transposeA="+n+" and transposeB="+r+" must match.");var f=o.shape.slice(0,-2).concat([u,l]),m=n?o.as3D(d,i,u):o.as3D(d,u,i),g=r?a.as3D(h,l,s):a.as3D(h,s,l);return ENV.engine.runKernel(function(e){return e.batchMatMul(m,g,n,r)},{$a:m,$b:g},function(e){return n||r?!n&&r?{$a:function(){return e.matMul(g.toFloat(),!1,!1)},$b:function(){return e.matMul(m.toFloat(),!0,!1)}}:n&&!r?{$a:function(){return g.toFloat().matMul(e,!1,!0)},$b:function(){return m.toFloat().matMul(e,!1,!1)}}:{$a:function(){return g.toFloat().matMul(e,!0,!0)},$b:function(){return e.matMul(m.toFloat(),!0,!0)}}:{$a:function(){return e.matMul(g.toFloat(),!1,!0)},$b:function(){return m.toFloat().matMul(e,!0,!1)}}}).reshape(f)}function outerProduct_(e,t){var n=convertToTensor(e,"v1","outerProduct"),r=convertToTensor(t,"v2","outerProduct");return assert(1===n.rank&&1===r.rank,"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),"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,"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 conv1d_(e,t,n,r,o,a,i){void 0===o&&(o="NWC"),void 0===a&&(a=1);var s=convertToTensor(e,"x","conv1d"),u=convertToTensor(t,"filter","conv1d"),l=s,c=!1;2===s.rank&&(c=!0,l=s.as3D(1,s.shape[0],s.shape[1])),assert(3===l.rank,"Error in conv1d: input must be rank 3, but got rank "+l.rank+"."),assert(3===u.rank,"Error in conv1d: filter must be rank 3, but got rank "+u.rank+"."),null!=i&&assert(isInt(r),"Error in conv1d: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+r+"."),assert(l.shape[2]===u.shape[1],"Error in conv1d: depth of input ("+l.shape[2]+") must match input depth for filter "+u.shape[1]+"."),assert(eitherStridesOrDilationsAreOne(n,a),"Error in conv1D: Either stride or dilation must be 1. Got stride "+n+" and dilation '"+a+"'"),assert("NWC"===o,"Error in conv1d: got dataFormat of "+o+" but only NWC is currently supported.");var p=u.as4D(1,u.shape[0],u.shape[1],u.shape[2]),d=l.as4D(l.shape[0],1,l.shape[1],l.shape[2]),h=conv2d(d,p,[1,n],r,"NHWC",[1,a],i);return c?h.as2D(h.shape[2],h.shape[3]):h.as3D(h.shape[0],h.shape[2],h.shape[3])}function conv2d_(e,t,n,r,o,a,i){void 0===o&&(o="NHWC"),void 0===a&&(a=[1,1]);var s=convertToTensor(e,"x","conv2d"),u=convertToTensor(t,"filter","conv2d"),l=s,c=!1;3===s.rank&&(c=!0,l=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),assert(4===l.rank,"Error in conv2d: input must be rank 4, but got rank "+l.rank+"."),assert(4===u.rank,"Error in conv2d: filter must be rank 4, but got rank "+u.rank+"."),null!=i&&assert(isInt(r),"Error in conv2d: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+r+"."),assert(l.shape[3]===u.shape[2],"Error in conv2d: depth of input ("+l.shape[3]+") must match input depth for filter "+u.shape[2]+"."),assert(eitherStridesOrDilationsAreOne(n,a),"Error in conv2D: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+a+"'"),assert("NHWC"===o,"Error in conv2d: got dataFormat of "+o+" but only NHWC is currently supported.");var p,d=computeConv2DInfo(l.shape,u.shape,n,a,r,i);if(1===d.filterHeight&&1===d.filterWidth&&1===d.dilationHeight&&1===d.dilationWidth&&1===d.strideHeight&&1===d.strideWidth&&"SAME"===d.padInfo.type){var h=l.reshape([-1,d.inChannels]),f=u.reshape([d.inChannels,d.outChannels]);p=matMul(h,f).reshape(d.outShape);}else{p=ENV.engine.runKernel(function(e){return e.conv2d(l,u,d)},{x:l,$filter:u},function(e){return assert(tupleValuesAreOne(a),"Error in gradient of conv2D: dilation rates greater than 1 are notyet supported in gradients. Got dilations '"+a+"'"),{x:function(){return conv2dDerInput_(l.shape,e,u,n,r)},$filter:function(){return conv2dDerFilter_(l,e,u.shape,n,r)}}});}return c?p.as3D(p.shape[1],p.shape[2],p.shape[3]):p}function conv2dDerInput_(e,t,n,r,o,a){assert(e.length===t.rank,"Length of inShape ("+e.length+") and rank of dy ("+t.rank+") must match");var i=e,s=t,u=!1;3===t.rank&&(u=!0,s=t.as4D(1,t.shape[0],t.shape[1],t.shape[2]),i=[1,e[0],e[1],e[2]]);var l=i[3],c=s.shape[3];assert(4===i.length,"Error in conv2dDerInput: inShape must be length 4, but got length "+i.length+"."),assert(4===s.rank,"Error in conv2dDerInput: dy must be rank 4, but got rank "+s.rank),assert(4===n.rank,"Error in conv2dDerInput: filter must be rank 4, but got rank "+n.rank),assert(l===n.shape[2],"Error in conv2dDerInput: depth of input ("+l+") must match input depth for filter "+n.shape[2]+"."),assert(c===n.shape[3],"Error in conv2dDerInput: depth of output ("+c+") must match output depth for filter "+n.shape[3]+"."),null!=a&&assert(isInt(o),"Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+o+".");var p=computeConv2DInfo(i,n.shape,r,1,o,a),d=ENV.engine.runKernel(function(e){return e.conv2dDerInput(s,n,p)},{dy4D:s});return u?d.as3D(d.shape[1],d.shape[2],d.shape[3]):d}function conv2dDerFilter_(e,t,n,r,o,a){var i=e;3===e.rank&&(i=e.as4D(1,e.shape[0],e.shape[1],e.shape[2]));var s=t;3===s.rank&&(s=t.as4D(1,t.shape[0],t.shape[1],t.shape[2])),assert(4===i.rank,"Error in conv2dDerFilter: input must be rank 4, but got shape "+i.shape+"."),assert(4===s.rank,"Error in conv2dDerFilter: dy must be rank 4, but got shape "+s.shape+"."),assert(4===n.length,"Error in conv2dDerFilter: filterShape must be length 4, but got "+n+"."),assert(i.shape[3]===n[2],"Error in conv2dDerFilter: depth of input "+i.shape[3]+") must match input depth in filter ("+n[2]+"."),assert(s.shape[3]===n[3],"Error in conv2dDerFilter: depth of dy ("+s.shape[3]+") must match output depth for filter ("+n[3]+")."),null!=a&&assert(isInt(o),"Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+o+".");var u=computeConv2DInfo(i.shape,n,r,1,o,a);return ENV.engine.runKernel(function(e){return e.conv2dDerFilter(i,s,u)},{x4D:i,dy4D:s})}function conv2dTranspose_(e,t,n,r,o,a){return conv2dDerInput_(n,convertToTensor(e,"x","conv2dTranspose"),convertToTensor(t,"filter","conv2dTranspose"),r,o,a)}function depthwiseConv2d_(e,t,n,r,o,a,i){void 0===o&&(o="NHWC"),void 0===a&&(a=[1,1]);var s=convertToTensor(e,"x","depthwiseConv2d"),u=convertToTensor(t,"filter","depthwiseConv2d"),l=s,c=!1;3===s.rank&&(c=!0,l=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),assert(4===l.rank,"Error in depthwiseConv2d: input must be rank 4, but got rank "+l.rank+"."),assert(4===u.rank,"Error in depthwiseConv2d: filter must be rank 4, but got rank "+u.rank+"."),assert(l.shape[3]===u.shape[2],"Error in depthwiseConv2d: number of input channels ("+l.shape[3]+") must match the inChannels dimension in filter "+u.shape[2]+"."),null==a&&(a=[1,1]),assert(eitherStridesOrDilationsAreOne(n,a),"Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+a+"'"),null!=i&&assert(isInt(r),"Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+r+".");var p=computeConv2DInfo(l.shape,u.shape,n,a,r,i,!0),d=ENV.engine.runKernel(function(e){return e.depthwiseConv2D(l,u,p)},{x:l,$filter:u},function(e){return assert(tupleValuesAreOne(a),"Error in gradient of depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+a+"'"),{x:function(){return depthwiseConv2dDerInput(l.shape,e,u,p)},$filter:function(){return depthwiseConv2dDerFilter(l,e,u.shape,p)}}});return c?d.as3D(d.shape[1],d.shape[2],d.shape[3]):d}function separableConv2d_(e,t,n,r,o,a,i){void 0===a&&(a=[1,1]),void 0===i&&(i="NHWC");var s=convertToTensor(e,"x","separableConv2d"),u=convertToTensor(t,"depthwiseFilter","separableConv2d"),l=convertToTensor(n,"pointwiseFilter","separableConv2d"),c=s,p=!1;if(3===s.rank&&(p=!0,c=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),"NCHW"===i)throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");assert(4===c.rank,"Error in separableConv2d: input must be rank 4, but got rank "+c.rank+"."),assert(4===u.rank,"Error in separableConv2d: depthwise filter must be rank 4, but got rank "+u.rank+"."),assert(4===l.rank,"Error in separableConv2d: pointwise filter must be rank 4, but got rank "+u.rank+"."),assert(1===l.shape[0],"Error in separableConv2d: the first dimension of pointwise filter must be 1, but got "+l.shape[0]+"."),assert(1===l.shape[1],"Error in separableConv2d: the second dimension of pointwise filter must be 1, but got "+l.shape[1]+".");var d=u.shape[2],h=u.shape[3];assert(l.shape[2]===d*h,"Error in separableConv2d: the third dimension of pointwise filter must be "+d*h+", but got "+l.shape[2]+".");var f=depthwiseConv2d(c,u,r,o,i,a),m=conv2d(f,l,1,"valid",i);return p?m.as3D(m.shape[1],m.shape[2],m.shape[3]):m}function parseTupleParam$1(e){return "number"==typeof e?[e,e]:e}function tupleValuesAreOne(e){var t=parseTupleParam$1(e),n=t[0],r=t[1];return 1===n&&1===r}function eitherStridesOrDilationsAreOne(e,t){return tupleValuesAreOne(e)||tupleValuesAreOne(t)}function depthwiseConv2dDerInput(e,t,n,r){var o=t,a=!1;3===t.rank&&(a=!0,o=t.as4D(1,t.shape[0],t.shape[1],t.shape[2]));var i=ENV.engine.runKernel(function(e){return e.depthwiseConv2DDerInput(o,n,r)},{dy4D:o});return a?i.as3D(i.shape[1],i.shape[2],i.shape[3]):i}function depthwiseConv2dDerFilter(e,t,n,r){var o=e;3===e.rank&&(o=e.as4D(1,e.shape[0],e.shape[1],e.shape[2]));var a=t;return 3===a.rank&&(a=t.as4D(1,t.shape[0],t.shape[1],t.shape[2])),ENV.engine.runKernel(function(e){return e.depthwiseConv2DDerFilter(o,a,r)},{x4D:o,dy4D:a})}var conv1d=op({conv1d_:conv1d_}),conv2d=op({conv2d_:conv2d_}),depthwiseConv2d=op({depthwiseConv2d_:depthwiseConv2d_}),separableConv2d=op({separableConv2d_:separableConv2d_}),conv2dTranspose=op({conv2dTranspose_:conv2dTranspose_});function reverse1d_(e){var t=convertToTensor(e,"x","reverse");return assert(1===t.rank,"Error in reverse1D: x must be rank 1 but got\n rank "+t.rank+"."),reverse(t,0)}function reverse2d_(e,t){var n=convertToTensor(e,"x","reverse");return assert(2===n.rank,"Error in reverse2D: x must be rank 2 but got\n rank "+n.rank+"."),reverse(n,t)}function reverse3d_(e,t){var n=convertToTensor(e,"x","reverse");return assert(3===n.rank,"Error in reverse3D: x must be rank 3 but got\n rank "+n.rank+"."),reverse(n,t)}function reverse4d_(e,t){var n=convertToTensor(e,"x","reverse");return assert(4===n.rank,"Error in reverse4D: x must be rank 4 but got\n 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 maxPool_(e,t,n,r,o){var a=convertToTensor(e,"x","maxPool"),i=a,s=!1;3===a.rank&&(s=!0,i=a.as4D(1,a.shape[0],a.shape[1],a.shape[2])),assert(4===i.rank,"Error in maxPool: input must be rank 4 but got rank "+i.rank+"."),null!=o&&assert(isInt(r),"Error in maxPool: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+r+".");var u=computePool2DInfo(i.shape,t,n,r,o),l=ENV.engine.runKernel(function(e,t){return t(e.maxPool(i,u))},{x:i},function(e,o){var a=o[0];return {x:function(){return maxPoolBackprop(e,i,a,t,n,r)}}});return s?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}function avgPool_(e,t,n,r,o){var a=convertToTensor(e,"x","avgPool");assert("float32"===a.dtype,"The input dtype to avgPool must be float32");var i=a,s=!1;3===a.rank&&(s=!0,i=a.as4D(1,a.shape[0],a.shape[1],a.shape[2])),assert(4===i.rank,"Error in avgPool: x must be rank 4 but got rank "+i.rank+"."),null!=o&&assert(isInt(r),"Error in avgPool: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+r+".");var u=computePool2DInfo(i.shape,t,n,r),l=ENV.engine.runKernel(function(e){return e.avgPool(i,u)},{x:i},function(e){return {x:function(){return avgPoolBackprop(e,i,t,n,r)}}});return l=l.cast(a.dtype),s?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}function maxPoolBackprop(e,t,n,r,o,a,i){var s=convertToTensor(e,"dy","maxPoolBackprop"),u=convertToTensor(t,"input","maxPoolBackprop"),l=convertToTensor(n,"output","maxPoolBackprop");assert(u.rank===s.rank,"Rank of input ("+u.rank+") does not match rank of dy ("+s.rank+")"),assert(4===s.rank,"Error in maxPoolBackprop: dy must be rank 4 but got rank "+s.rank+"."),assert(4===u.rank,"Error in maxPoolBackprop: input must be rank 4 but got rank "+u.rank+"."),null!=i&&assert(isInt(a),"Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+a+".");var c=computePool2DInfo(u.shape,r,o,a,i);return ENV.engine.runKernel(function(e){return e.maxPoolBackprop(s,u,l,c)},{$dy:s,$input:u})}function avgPoolBackprop(e,t,n,r,o){var a=convertToTensor(e,"dy","avgPoolBackprop"),i=convertToTensor(t,"input","avgPoolBackprop");assert(i.rank===a.rank,"Rank of input ("+i.rank+") does not match rank of dy ("+a.rank+")");var s=i,u=a,l=!1;3===i.rank&&(l=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2]),u=a.as4D(1,a.shape[0],a.shape[1],a.shape[2])),assert(4===u.rank,"Error in avgPoolBackprop: dy must be rank 4 but got rank "+u.rank+"."),assert(4===s.rank,"Error in avgPoolBackprop: input must be rank 4 but got rank "+s.rank+".");var c=computePool2DInfo(s.shape,n,r,o),p=ENV.engine.runKernel(function(e){return e.avgPoolBackprop(u,s,c)},{dy4D:u,input4D:s});return l?p.as3D(p.shape[1],p.shape[2],p.shape[3]):p}var maxPool=op({maxPool_:maxPool_}),avgPool=op({avgPool_:avgPool_});function slice1d_(e,t,n){var r=convertToTensor(e,"x","slice1d");return assert(1===r.rank,"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,"slice1d 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,"slice1d 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,"slice1d 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,"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(r)),t.reshape(n.shape)},$b:function(){var t=e,n=getReductionAxes(r.shape,o);return n.length>0&&(t=t.sum(n)),t.reshape(r.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){return assertShapesMatch(e.shape,t.shape,"Error in addStrict: "),e.add(t)}function sub_(e,t){var n=convertToTensor(e,"a","sub"),r=convertToTensor(t,"b","sub");assertTypesMatch(n,r);var o=assertAndGetBroadcastShape(n.shape,r.shape);return ENV.engine.runKernel(function(e){return e.subtract(n,r)},{$a:n,$b:r},function(e){return {$a:function(){var t=e,r=getReductionAxes(n.shape,o);return r.length>0&&(t=t.sum(r)),t.reshape(n.shape)},$b:function(){var t=e,n=getReductionAxes(r.shape,o);return n.length>0&&(t=t.sum(n)),t.neg().reshape(r.shape)}}})}function subStrict_(e,t){return assertShapesMatch(e.shape,t.shape,"Error in subStrict: "),e.sub(t)}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){return t(e.pow(n,r))},{$base:n,$exp:r},function(e,t){var a=t[0];return {$base:function(){var t=e.mul(r.toFloat().mul(a.div(n))),i=getReductionAxes(n.shape,o);return i.length>0&&(t=t.sum(i)),t.reshape(n.shape)},$exp:function(){var t=e.mul(a.mul(n.log()).toFloat()),i=getReductionAxes(r.shape,o);return i.length>0&&(t=t.sum(i)),t.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=convertToTensor(e,"a","mul"),r=convertToTensor(t,"b","mul");assertTypesMatch(n,r);var o=assertAndGetBroadcastShape(n.shape,r.shape);return ENV.engine.runKernel(function(e){return e.multiply(n,r)},{$a:n,$b:r},function(e){return {$a:function(){var t=e.mul(r.toFloat()),a=getReductionAxes(n.shape,o);return a.length>0?t.sum(a).reshape(n.shape):t},$b:function(){var t=e.mul(n.toFloat()),a=getReductionAxes(r.shape,o);return a.length>0?t.sum(a).reshape(r.shape):t}}})}function mulStrict_(e,t){return assertShapesMatch(e.shape,t.shape,"Error in multiplyStrict: "),e.mul(t)}function div_(e,t){var n,r=convertToTensor(e,"a","div"),o=convertToTensor(t,"b","div");if(assertTypesMatch(r,o),"int32"===r.dtype&&"int32"===o.dtype)return floorDiv(r,o);n=function(e){return e.realDivide(r,o)};var a=assertAndGetBroadcastShape(r.shape,o.shape);return ENV.engine.runKernel(n,{$a:r,$b:o},function(e){return {$a:function(){var t=e.div(o.toFloat()),n=getReductionAxes(r.shape,a);return n.length>0?t.sum(n).reshape(r.shape):t},$b:function(){var t=e.mul(r.toFloat()),n=getReductionAxes(o.shape,a);n.length>0&&(t=t.sum(n).reshape(o.shape));var i=o.square();return t.div(i.toFloat()).neg()}}})}function floorDiv_(e,t){var n=convertToTensor(e,"a","floorDiv"),r=convertToTensor(t,"b","floorDiv");assertTypesMatch(n,r);var o=assertAndGetBroadcastShape(n.shape,r.shape);return ENV.engine.runKernel(function(e){return e.floorDiv(n,r)},{$a:n,$b:r},function(e){return {$a:function(){var t=e.div(r.toFloat()),a=getReductionAxes(n.shape,o);return a.length>0?t.sum(a).reshape(n.shape):t},$b:function(){var t=e.mul(n.toFloat()),a=getReductionAxes(r.shape,o);a.length>0&&(t=t.sum(a).reshape(r.shape));var i=r.square();return t.div(i.toFloat()).neg()}}})}function divStrict_(e,t){return assertShapesMatch(e.shape,t.shape,"Error in divideStrict: "),e.div(t)}function mod_(e,t){var n=convertToTensor(e,"a","mod"),r=convertToTensor(t,"b","mod");assertTypesMatch(n,r);var o=assertAndGetBroadcastShape(n.shape,r.shape);return ENV.engine.runKernel(function(e){return e.mod(n,r)},{$a:n,$b:r},function(e){return {$a:function(){var t=getReductionAxes(n.shape,o);return t.length>0?e.sum(t).reshape(n.shape):e},$b:function(){var t=e.mul(n.div(r).floor().neg()),a=getReductionAxes(r.shape,o);return a.length>0?t.sum(a).reshape(r.shape):t}}})}function modStrict_(e,t){return assertShapesMatch(e.shape,t.shape,"Error in modStrict: "),e.mod(t)}function minimum_(e,t){var n=convertToTensor(e,"a","minimum"),r=convertToTensor(t,"b","minimum");assertTypesMatch(n,r),"bool"===n.dtype&&(n=n.toInt()),"bool"===r.dtype&&(r=r.toInt()),assertAndGetBroadcastShape(n.shape,r.shape);return ENV.engine.runKernel(function(e){return e.minimum(n,r)},{$a:n,$b:r},function(e){return {$a:function(){return e.mul(n.lessEqual(r).toFloat())},$b:function(){return e.mul(n.greater(r).toFloat())}}})}function minimumStrict_(e,t){return assertShapesMatch(e.shape,t.shape,"Error in minimumStrict: "),e.minimum(t)}function maximum_(e,t){var n=convertToTensor(e,"a","maximum"),r=convertToTensor(t,"b","maximum");assertTypesMatch(n,r),"bool"===n.dtype&&(n=n.toInt()),"bool"===r.dtype&&(r=r.toInt()),assertAndGetBroadcastShape(n.shape,r.shape);return ENV.engine.runKernel(function(e){return e.maximum(n,r)},{$a:n,$b:r},function(e){return {$a:function(){return e.mul(n.greaterEqual(r).toFloat())},$b:function(){return e.mul(n.less(r).toFloat())}}})}function maximumStrict_(e,t){return assertShapesMatch(e.shape,t.shape,"Error in maximumStrict: "),e.maximum(t)}function squaredDifference_(e,t){var n=convertToTensor(e,"a","squaredDifference"),r=convertToTensor(t,"b","squaredDifference");assertTypesMatch(n,r),assertAndGetBroadcastShape(n.shape,r.shape);return ENV.engine.runKernel(function(e){return e.squaredDifference(n,r)},{$a:n,$b:r},function(e){var t=scalar(2);return {$a:function(){return e.mul(n.sub(r).mul(t))},$b:function(){return e.mul(r.sub(n).mul(t))}}})}function squaredDifferenceStrict_(e,t){return assertShapesMatch(e.shape,t.shape,"Error in squaredDifferenceStrict: "),e.squaredDifference(t)}function atan2_(e,t){var n=convertToTensor(e,"a","atan2"),r=convertToTensor(t,"b","atan2");assertTypesMatch(n,r);var o=assertAndGetBroadcastShape(n.shape,r.shape);return ENV.engine.runKernel(function(e){return e.atan2(n,r)},{$a:n,$b:r},function(e){return {$a:function(){var t=add(n.square(),r.square()),a=e.mul(r.div(t)),i=getReductionAxes(n.shape,o);return i.length>0&&(a=a.sum(i)),a.reshape(n.shape)},$b:function(){var t=add(n.square(),r.square()),a=neg(e.mul(n.div(t))),i=getReductionAxes(r.shape,o);return i.length>0&&(a=a.sum(i)),a.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 assert("bool"===t.dtype,"Error Array must be of type bool."),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 assert("bool"===n.dtype&&"bool"===r.dtype,"Error Array must be of type bool."),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 assert("bool"===n.dtype&&"bool"===r.dtype,"Error Array must be of type bool."),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 assert("bool"===n.dtype&&"bool"===r.dtype,"Error Array must be of type bool."),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");assert("bool"===a.dtype,"Error Condition must be of type bool."),assertShapesMatch(r.shape,o.shape,"Error in where: "),1===a.rank?assert(a.shape[0]===r.shape[0],"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){return e.select(a,r,o)},{$condition:a,$a:r,$b:o},function(e){return {$condition:function(){return zerosLike(a)},$a:function(){return e.mul(a.cast(r.dtype))},$b:function(){return e.mul(a.logicalNot().cast(o.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 assert("bool"===(t=convertToTensor(e,"condition","where","bool")).dtype,"Condition must be of type bool."),[4,t.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){return e.relu(t)},{$x:t},function(e){var n=t.step();return {$x:function(){return e.mulStrict(n.toFloat())}}})}function elu_(e){var t=convertToTensor(e,"x","elu");return ENV.engine.runKernel(function(e,n){return n(e.elu(t))},{$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){return e.selu(t)},{$x:t},function(e){return {$x:function(){var n=t.greater(scalar(0)),r=scalar(SELU_SCALEALPHA),o=scalar(SELU_SCALE),a=e.mul(o),i=e.mul(r).mul(t.toFloat().exp());return where(n,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"),o=scalar(0);return maximum(o,n).add(r.mul(minimum(o,n)))}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,"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 Reduction,topk=op({topk_:topk_});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=sizeFromShape(r.shape)/sizeFromShape(o.shape),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),l=scalar(r),c=a.mul(i.add(l).log()).neg().sub(u.sub(a).mul(u.sub(i).add(l).log()));return computeWeightedLoss(c,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),l=scalar(1),c=scalar(.5);a=a.mul(l.sub(u)).add(c.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),l=i.sub(a).abs(),c=minimum(l,u),p=l.sub(c),d=scalar(.5).mul(c.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){var r=t.logSumExp([n],!0),o=t.toFloat().sub(r);return {value:o.mul(e).neg().sum([n]),gradFunc:function(t){var r=expandShapeToKeepDim(t.shape,[n]);return [t.reshape(r).mul(e.toFloat().sub(o.exp())),t.reshape(r).mul(o.exp().sub(e.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),l=scalar(1),c=scalar(a.shape[1]);a=a.mul(l.sub(u)).add(u.div(c));}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,"Gram-Schmidt process: input must not be null, undefined, or empty");for(var n=e[0].shape[0],r=1;r0)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,l=function(e){var t,u=a,l=s,c=o;t=ENV.engine.tidy(function(){var t=a.slice([e,e],[n-e,1]),u=t.norm(),l=a.slice([e,e],[1,1]),c=l.sign().neg(),p=l.sub(c.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=c.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,l,c]);},c=0;cr&&(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,"Error in resizeBilinear: x must be rank 3 or 4, but got rank "+r.rank+"."),assert(2===t.length,"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 e.resizeBilinear(o,i,s,n)},{batchImages:o},function(e,t){return {batchImages:function(){return ENV.engine.runKernel(function(t){return t.resizeBilinearBackprop(e,o,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,"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank "+r.rank+"."),assert(2===t.length,"Error in resizeNearestNeighbor: new shape must 2D, but got shape "+t+"."),assert("float32"===r.dtype||"int32"===r.dtype,"`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 e.resizeNearestNeighbor(o,i,s,n)},{batchImages:o},function(e,t){return {batchImages:function(){return ENV.engine.runKernel(function(t){return t.resizeNearestNeighborBackprop(e,o,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,l,c;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 l=p.sent(),c=nonMaxSuppressionImpl(u,l,n,r,o),a!==e&&a.dispose(),i!==t&&i.dispose(),[2,c]}})})}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,"iouThreshold must be in [0, 1], but was '"+r+"'"),assert(2===e.rank,"boxes must be a 2D tensor, but was of rank '"+e.rank+"'"),assert(4===e.shape[1],"boxes must have 4 columns, but 2nd dimension was "+e.shape[1]),assert(1===t.rank,"scores must be a 1D tensor"),assert(t.shape[0]===a,"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 l=s.shape[0];assert(4===i.rank,"Error in cropAndResize: image must be rank 4,but got rank "+i.rank+"."),assert(2===s.rank&&4===s.shape[1],"Error in cropAndResize: boxes must be have size ["+l+",4] but had shape "+s.shape+"."),assert(1===u.rank&&u.shape[0]===l,"Error in cropAndResize: boxInd must be have size ["+l+"] but had shape "+s.shape+"."),assert("int32"===u.dtype,"Error in cropAndResize: boxInd must be of dtype int32, but got dtype "+u.dtype+"."),assert(2===r.length,"Error in cropAndResize: cropSize must be of length 2, but got length "+r.length+"."),assert(r[0]>=1&&r[1]>=1,"cropSize must be atleast [1,1], but was "+r),assert("bilinear"===o||"nearest"===o,"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=cropAndResize_,image_ops=Object.freeze({resizeBilinear:resizeBilinear,resizeNearestNeighbor:resizeNearestNeighbor,nonMaxSuppression:nonMaxSuppression,nonMaxSuppressionAsync:nonMaxSuppressionAsync,cropAndResize:cropAndResize}),ops=Object.freeze({image:image_ops,linalg:linalg_ops,losses:loss_ops,op:op,batchNormalization2d:batchNormalization2d,batchNormalization3d:batchNormalization3d,batchNormalization4d:batchNormalization4d,batchNormalization:batchNormalization,complex:complex,real:real,imag:imag,concat:concat,concat1d:concat1d,concat2d:concat2d,concat3d:concat3d,concat4d:concat4d,split:split$1,conv1d:conv1d,conv2d:conv2d,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,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,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,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,toPixels:toPixels,print:print,batchToSpaceND:batchToSpaceND,cast:cast,clone:clone,cumsum:cumsum,depthToSpace:depthToSpace,expandDims:expandDims,eye:eye,fromPixels:fromPixels,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,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,localResponseNormalization:localResponseNormalization,norm:norm,gather:gather,unsortedSegmentSum:unsortedSegmentSum,basicLSTMCell:basicLSTMCell,multiRNNCell:multiRNNCell,movingAverage:movingAverage,stridedSlice:stridedSlice,topk:topk}),MathBackendCPU=function(){function e(){this.blockSize=48,this.firstUse=!0,ENV.get("IS_BROWSER")&&(this.canvas=document.createElement("canvas"));}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.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.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement or ImageData, but was "+e.constructor.name);if(null==this.canvas)throw new Error("Can't read pixels from HTMLImageElement outside the browser.");this.canvas.width=e.width,this.canvas.height=e.height,this.canvas.getContext("2d").drawImage(e,0,0,e.width,e.height),n=this.canvas.getContext("2d").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[c]=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],l=r?function(e,t){return e+u-t-1}:function(e,t){return e+t},c=0;ct?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 Int32Array(t.length),r=0;r1||1===t.rank?1:t.shape[1],c=0;c=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(),l=0;lp&&(p=h);}s[l]=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(),l=0;l0?n[r]=1:n[r]=0;return Tensor.make(e.shape,{values:n})},e.prototype.round=function(e){this.assertNotComplex(e,"round");for(var t=e.dataSync(),n=new Float32Array(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,l=buffer(n.outShape,e.dtype),c=e.dataSync(),p=t.dataSync(),d=l.values,h=0;h=n.inHeight))for(var b=x*t.strides[0],S=f+T*e.strides[1],E=0;E=n.inWidth))for(var R=b+C*t.strides[1],N=S+_*n.inChannels,k=R,I=0;I=n.inHeight))for(var S=T*t.strides[0],E=m+b*e.strides[1],w=0;w=n.inWidth))for(var N=S+_*t.strides[1],k=E+R*n.inChannels,I=A,D=N,M=0;Mb?b=C:"avg"===n&&(S+=C,E++);}if(isNaN(b))break}s.set("avg"===n?S/E:b,p,h,v,d);}return s.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.filterHeight,i=t.filterWidth,s=t.padInfo.top,u=t.padInfo.left,l=0;lx&&(x=A,T=S*i+w);}n.set(T,l,p,m,c);}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.filterHeight,u=r.filterWidth,l=u-1-r.padInfo.left,c=s-1-r.padInfo.top,p=buffer(t.shape,"float32"),d=0;d=r.outHeight||Math.floor(T)!==T))for(var b=0;b=r.outWidth||Math.floor(S)!==S)){var E=s*u-1-o.get(d,T,S,h)===x*u+b?1:0;if(0!==E)y+=e.get(d,T,S,h)*E;}}}p.set(y,d,f,m,h);}return p.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=i-1-n.padInfo.left,u=a-1-n.padInfo.top,l=buffer(t.shape,"float32"),c=1/(a*i),p=0;p=n.outHeight||Math.floor(x)!==x))for(var T=0;T=n.outWidth||Math.floor(b)!==b))v+=e.get(p,x,b,d);}}l.set(v*c,p,h,f,d);}return l.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],l=buffer([a,t,n,u],e.dtype),c=[r&&t>1?i-1:i,r&&n>1?s-1:s],p=[r&&t>1?t-1:t,r&&n>1?n-1:n],d=0;d1?a-1:a,n&&c>1?i-1:i],h=[n&&l>1?l-1:l,n&&c>1?c-1:c],f=d[0]/h[0],m=d[1]/h[1],g=0;g1?i-1:i,r&&n>1?s-1:s],p=[r&&t>1?t-1:t,r&&n>1?n-1:n],d=0;d1?a-1:a,n&&c>1?i-1:i],h=[n&&l>1?l-1:l,n&&c>1?c-1:c],f=1/(d[0]/h[0]),m=1/(d[1]/h[1]),g=2*Math.ceil(f)+2,v=2*Math.ceil(m)+2,y=0;y=l))for(var N=0;N=c)){var I=d[0]*(R/h[0]),D=d[1]*(k/h[1]),M=Math.min(a-1,n?Math.round(I):Math.floor(I)),O=Math.min(i-1,n?Math.round(D):Math.floor(D));x===M&&T===O&&(C+=e.get(y,R,k,A));}}}p.set(C,y,x,T,A);}return p.toTensor()},e.prototype.batchNormalization=function(e,t,n,r,o,a){this.assertNotComplex([e,t,n,o,a],"batchNormalization");for(var i=e.dataSync(),s=t.dataSync(),u=n.dataSync(),l=o?o.dataSync():new Float32Array([1]),c=a?a.dataSync():new Float32Array([0]),p=new Float32Array(i.length),d=c.length,h=l.length,f=u.length,m=s.length,g=0,v=0,y=0,x=0,T=0;T=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=sizeFromShape(e.shape),l=new Float32Array(u);function c(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 l=s[r];u+=l*l;}return u}for(var p=0;p=0&&e.get(a)1,"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,l=i/(t*t),c=e.dataSync(),p=new Float32Array(r*s*u*l),d=0,h=0;h=s))for(var _=d>1?(w-S)*(u-1)/(d-1):0,R=h>1?(A-E)*(l-1)/(h-1):0,N=0;N1?S*(u-1)+N*_:.5*(S+w)*(u-1);if(k<0||k>u-1)for(var I=0;I1?E*(l-1)+I*R:.5*(E+A)*(l-1))<0||q>l-1)for(D=0;D1?E*(l-1)+I*R:.5*(E+A)*(l-1))<0||q>l-1)for(D=0;D0,"scheme must not be an empty string.");var r=e.getInstance();assert(null==r.managers[t],"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,l,c,p;return __generator(this,function(d){switch(d.label){case 0:return assert(e!==t,"Old path and new path are the same: '"+e+"'"),assert((r=IORouterRegistry.getLoadHandlers(e)).length>0,"Copying failed because no load handler is found for source URL "+e+"."),assert(r.length<2,"Copying failed because more than one ("+r.length+") load handlers for source URL "+e+"."),o=r[0],assert((a=IORouterRegistry.getSaveHandlers(t)).length>0,"Copying failed because no save handler is found for destination URL "+t+"."),assert(a.length<2,"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,l=s===parseURL(e).scheme,[4,o.load()];case 1:return c=d.sent(),n&&l?[4,ModelStoreManagerRegistry.getManager(s).removeModel(u)]:[3,3];case 2:d.sent(),d.label=3;case 3:return [4,i.save(c)];case 4:return p=d.sent(),!n||l?[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,"URL path for browserHTTPRequest must not be null, undefined or empty."),Array.isArray(e)&&assert(2===e.length,"URL paths for browserHTTPRequest must have a length of 2, (actual length is "+e.length+")."),this.path=e,null!=t&&null!=t.body)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t||{};}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,weightsManifest:n},t.body.append("model.json",new Blob([JSON.stringify(r)],{type:"application/json"}),"model.json"),null!=e.weightData&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:"application/octet-stream"}),"model.weights.bin"),[4,fetch(this.path,t)];case 1:if(200===(o=a.sent()).status)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(){return __generator(this,function(e){return [2,Array.isArray(this.path)?this.loadBinaryModel():this.loadJSONModel()]})})},e.prototype.loadBinaryTopology=function(){return __awaiter(this,void 0,void 0,function(){var e;return __generator(this,function(t){switch(t.label){case 0:return t.trys.push([0,3,,4]),[4,fetch(this.path[0],this.requestInit)];case 1:return [4,t.sent().arrayBuffer()];case 2:return [2,t.sent()];case 3:throw e=t.sent(),new Error(this.path[0]+" not found. "+e);case 4:return [2]}})})},e.prototype.loadBinaryModel=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 e=this.loadBinaryTopology(),[4,fetch(this.path[1],this.requestInit)];case 1:return t=u.sent(),[4,Promise.all([e,t])];case 2:return n=u.sent(),r=n[0],[4,n[1].json()];case 3:return null==(o=u.sent())?[3,5]:[4,this.loadWeights(o)];case 4:s=u.sent(),a=s[0],i=s[1],u.label=5;case 5:return [2,{modelTopology:r,weightSpecs:a,weightData:i}]}})})},e.prototype.loadJSONModel=function(){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:return [4,fetch(this.path,this.requestInit)];case 1:return [4,s.sent().json()];case 2:if(e=s.sent(),t=e.modelTopology,n=e.weightsManifest,null==t&&null==n)throw new Error("The JSON from HTTP path "+this.path+" contains neither model topology or manifest for weights.");return null==n?[3,4]:(a=e.weightsManifest,[4,this.loadWeights(a)]);case 3:i=s.sent(),r=i[0],o=i[1],s.label=4;case 4:return [2,{modelTopology:t,weightSpecs:r,weightData:o}]}})})},e.prototype.loadWeights=function(e){return __awaiter(this,void 0,void 0,function(){var t,n,r,o,a,i,s,u,l;return __generator(this,function(c){switch(c.label){case 0:for(t=Array.isArray(this.path)?this.path[1]:this.path,n=[],r=0,o=e;r0&&(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 registerSaveRouter=IORouterRegistry.registerSaveRouter,registerLoadRouter=IORouterRegistry.registerLoadRouter,getSaveHandlers=IORouterRegistry.getSaveHandlers,getLoadHandlers=IORouterRegistry.getLoadHandlers,io=Object.freeze({browserFiles:browserFiles,browserHTTPRequest:browserHTTPRequest,concatenateArrayBuffers:concatenateArrayBuffers,decodeWeights:decodeWeights,encodeWeights:encodeWeights,fromMemory:fromMemory,getLoadHandlers:getLoadHandlers,getModelArtifactsInfoForJSON:getModelArtifactsInfoForJSON,getSaveHandlers:getSaveHandlers,loadWeights:loadWeights,registerLoadRouter:registerLoadRouter,registerSaveRouter:registerSaveRouter,withSaveHandler:withSaveHandler,copyModel:copyModel,listModels:listModels,moveModel:moveModel,removeModel:removeModel}),Serializable=function(){function e(){}return e.prototype.getClassName=function(){return this.constructor.className},e.fromConfig=function(e,t){return new e(t)},e}(),SerializationMap=function(){function e(){this.classNameMap={};}return e.getMap=function(){return null==e.instance&&(e.instance=new e),e.instance},e.register=function(t){e.getMap().classNameMap[t.className]=[t,t.fromConfig];},e}();function registerClass(e){assert(null!=e.className,"Class being registered does not have the static className property defined."),assert("string"==typeof e.className,"className is required to be a string, but got type "+typeof e.className),assert(e.className.length>0,"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},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){if(null==n&&(n=ENV.get("TEST_EPSILON")),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,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="0.13.2",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}(Serializable),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 l=t.c.mul(r).add(o);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.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],l=t.accumulatedSecondMoment[o],c=t.beta1Scalar.mul(u).add(t.oneMinusBeta1.mul(s)),p=t.beta2Scalar.mul(l).add(t.oneMinusBeta2.mul(s.square())),d=c.div(n),h=p.div(r);t.accumulatedFirstMoment[o].assign(c),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],l=t.accumulatedWeightedInfNorm[o],c=t.beta1Scalar.mul(u).add(t.oneMinusBeta1.mul(s)),p=t.beta2Scalar.mul(l),d=s.abs(),h=p.maximum(d);t.accumulatedFirstMoment[o].assign(c),t.accumulatedWeightedInfNorm[o].assign(h);var f=r.div(n).mul(c.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)),l=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(l);var c=o.sub(l);o.assign(c);}else{var p=t.decayScalar.mul(a).add(t.oneMinusDecay.mul(u.square()));l=t.momentumScalar.mul(s).add(t.c.mul(u).div(p.add(t.epsilonScalar).sqrt()));t.accumulatedMeanSquares[n].assign(p),t.accumulatedMoments[n].assign(l);c=o.sub(l);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.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, - environment: environment, - io: io, - serialization: serialization, - test_util: test_util, - util: util, - webgl: webgl, - 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, - DataStorage: DataStorage, - image: image_ops, - linalg: linalg_ops, - losses: loss_ops, - op: op, - batchNormalization2d: batchNormalization2d, - batchNormalization3d: batchNormalization3d, - batchNormalization4d: batchNormalization4d, - batchNormalization: batchNormalization, - complex: complex, - real: real, - imag: imag, - concat: concat, - concat1d: concat1d, - concat2d: concat2d, - concat3d: concat3d, - concat4d: concat4d, - split: split$1, - conv1d: conv1d, - conv2d: conv2d, - 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, - 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, - 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, - 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, - toPixels: toPixels, - print: print, - batchToSpaceND: batchToSpaceND, - cast: cast, - clone: clone, - cumsum: cumsum, - depthToSpace: depthToSpace, - expandDims: expandDims, - eye: eye, - fromPixels: fromPixels, - 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, - 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, - localResponseNormalization: localResponseNormalization, - norm: norm, - gather: gather, - unsortedSegmentSum: unsortedSegmentSum, - basicLSTMCell: basicLSTMCell, - multiRNNCell: multiRNNCell, - movingAverage: movingAverage, - stridedSlice: stridedSlice, - topk: topk, - train: train, - tidy: tidy, - keep: keep, - dispose: dispose, - time: time, - profile: profile, - customGrad: customGrad, - grad: grad, - grads: grads, - valueAndGrad: valueAndGrad, - valueAndGrads: valueAndGrads, - variableGrads: variableGrads - }); - - /*! ***************************************************************************** - 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 commonjsGlobal$1 = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - function createCommonjsModule$1(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var isBuffer = function isBuffer(arg) { - return arg instanceof Buffer; - }; - - var inherits_browser = createCommonjsModule$1(function (module) { - if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true + /** + * @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