{"version":3,"sources":["webpack:///./src/views/ChatGPT/Facerecognition.vue?6758","webpack:///./node_modules/core-js/modules/web.url-search-params.has.js","webpack:///./public/img/play.png","webpack:///./node_modules/core-js/modules/web.url-search-params.size.js","webpack:///./node_modules/face-api.js/build/es6/env/createNodejsEnv.js","webpack:///./node_modules/core-js/modules/web.url-search-params.delete.js","webpack:///./node_modules/face-api.js/build/es6/env/isNodejs.js","webpack:///./public/img/img02.png","webpack:///./public/img/img03.png","webpack:///./src/views/ChatGPT/Facerecognition.vue","webpack:///./node_modules/face-api.js/build/es6/draw/drawContour.js","webpack:///./node_modules/face-api.js/build/es6/classes/Dimensions.js","webpack:///./node_modules/face-api.js/build/es6/utils/index.js","webpack:///./node_modules/face-api.js/build/es6/classes/Point.js","webpack:///./node_modules/face-api.js/build/es6/classes/Box.js","webpack:///./node_modules/face-api.js/build/es6/classes/BoundingBox.js","webpack:///./node_modules/face-api.js/build/es6/classes/ObjectDetection.js","webpack:///./node_modules/face-api.js/build/es6/classes/FaceDetection.js","webpack:///./node_modules/face-api.js/build/es6/ops/iou.js","webpack:///./node_modules/face-api.js/build/es6/ops/minBbox.js","webpack:///./node_modules/face-api.js/build/es6/ops/nonMaxSuppression.js","webpack:///./node_modules/face-api.js/build/es6/ops/normalize.js","webpack:///./node_modules/face-api.js/build/es6/ops/padToSquare.js","webpack:///./node_modules/face-api.js/build/es6/ops/index.js","webpack:///./node_modules/face-api.js/build/es6/classes/Rect.js","webpack:///./node_modules/face-api.js/build/es6/classes/FaceLandmarks.js","webpack:///./node_modules/face-api.js/build/es6/classes/FaceLandmarks5.js","webpack:///./node_modules/face-api.js/build/es6/classes/FaceLandmarks68.js","webpack:///./node_modules/face-api.js/build/es6/classes/FaceMatch.js","webpack:///./node_modules/face-api.js/build/es6/classes/LabeledBox.js","webpack:///./node_modules/face-api.js/build/es6/classes/LabeledFaceDescriptors.js","webpack:///./node_modules/face-api.js/build/es6/classes/PredictedBox.js","webpack:///./node_modules/face-api.js/build/es6/factories/WithFaceDetection.js","webpack:///./node_modules/face-api.js/build/es6/env/createBrowserEnv.js","webpack:///./node_modules/face-api.js/build/es6/env/isBrowser.js","webpack:///./node_modules/face-api.js/build/es6/env/index.js","webpack:///./node_modules/face-api.js/build/es6/draw/DrawTextField.js","webpack:///./node_modules/face-api.js/build/es6/dom/resolveInput.js","webpack:///./node_modules/face-api.js/build/es6/dom/getContext2dOrThrow.js","webpack:///./node_modules/face-api.js/build/es6/draw/DrawBox.js","webpack:///./node_modules/face-api.js/build/es6/draw/drawDetections.js","webpack:///./node_modules/face-api.js/build/es6/dom/isMediaLoaded.js","webpack:///./node_modules/face-api.js/build/es6/dom/awaitMediaLoaded.js","webpack:///./node_modules/face-api.js/build/es6/dom/bufferToImage.js","webpack:///./node_modules/face-api.js/build/es6/dom/getMediaDimensions.js","webpack:///./node_modules/face-api.js/build/es6/dom/createCanvas.js","webpack:///./node_modules/face-api.js/build/es6/dom/imageTensorToCanvas.js","webpack:///./node_modules/face-api.js/build/es6/dom/isMediaElement.js","webpack:///./node_modules/face-api.js/build/es6/dom/imageToSquare.js","webpack:///./node_modules/face-api.js/build/es6/dom/NetInput.js","webpack:///./node_modules/face-api.js/build/es6/dom/toNetInput.js","webpack:///./node_modules/face-api.js/build/es6/dom/extractFaces.js","webpack:///./node_modules/face-api.js/build/es6/dom/extractFaceTensors.js","webpack:///./node_modules/face-api.js/build/es6/dom/fetchOrThrow.js","webpack:///./node_modules/face-api.js/build/es6/dom/fetchJson.js","webpack:///./node_modules/face-api.js/build/es6/common/getModelUris.js","webpack:///./node_modules/face-api.js/build/es6/dom/loadWeightMap.js","webpack:///./node_modules/face-api.js/build/es6/dom/matchDimensions.js","webpack:///./node_modules/face-api.js/build/es6/NeuralNetwork.js","webpack:///./node_modules/face-api.js/build/es6/common/depthwiseSeparableConv.js","webpack:///./node_modules/face-api.js/build/es6/faceFeatureExtractor/denseBlock.js","webpack:///./node_modules/face-api.js/build/es6/common/convLayer.js","webpack:///./node_modules/face-api.js/build/es6/common/disposeUnusedWeightTensors.js","webpack:///./node_modules/face-api.js/build/es6/common/extractConvParamsFactory.js","webpack:///./node_modules/face-api.js/build/es6/common/extractFCParamsFactory.js","webpack:///./node_modules/face-api.js/build/es6/common/types.js","webpack:///./node_modules/face-api.js/build/es6/common/extractSeparableConvParamsFactory.js","webpack:///./node_modules/face-api.js/build/es6/common/extractWeightEntryFactory.js","webpack:///./node_modules/face-api.js/build/es6/common/extractWeightsFactory.js","webpack:///./node_modules/face-api.js/build/es6/faceFeatureExtractor/extractorsFactory.js","webpack:///./node_modules/face-api.js/build/es6/faceFeatureExtractor/extractParams.js","webpack:///./node_modules/face-api.js/build/es6/common/loadConvParamsFactory.js","webpack:///./node_modules/face-api.js/build/es6/faceFeatureExtractor/loadParamsFactory.js","webpack:///./node_modules/face-api.js/build/es6/faceFeatureExtractor/extractParamsFromWeigthMap.js","webpack:///./node_modules/face-api.js/build/es6/faceFeatureExtractor/FaceFeatureExtractor.js","webpack:///./node_modules/face-api.js/build/es6/common/fullyConnectedLayer.js","webpack:///./node_modules/face-api.js/build/es6/faceProcessor/extractParams.js","webpack:///./node_modules/face-api.js/build/es6/faceProcessor/extractParamsFromWeigthMap.js","webpack:///./node_modules/face-api.js/build/es6/faceProcessor/util.js","webpack:///./node_modules/face-api.js/build/es6/faceProcessor/FaceProcessor.js","webpack:///./node_modules/face-api.js/build/es6/faceExpressionNet/FaceExpressions.js","webpack:///./node_modules/face-api.js/build/es6/faceExpressionNet/FaceExpressionNet.js","webpack:///./node_modules/face-api.js/build/es6/factories/WithFaceExpressions.js","webpack:///./node_modules/face-api.js/build/es6/draw/drawFaceExpressions.js","webpack:///./node_modules/face-api.js/build/es6/factories/WithFaceLandmarks.js","webpack:///./node_modules/face-api.js/build/es6/draw/DrawFaceLandmarks.js","webpack:///./node_modules/face-api.js/build/es6/xception/extractParams.js","webpack:///./node_modules/face-api.js/build/es6/xception/extractParamsFromWeigthMap.js","webpack:///./node_modules/face-api.js/build/es6/xception/TinyXception.js","webpack:///./node_modules/face-api.js/build/es6/ageGenderNet/types.js","webpack:///./node_modules/face-api.js/build/es6/ageGenderNet/extractParams.js","webpack:///./node_modules/face-api.js/build/es6/ageGenderNet/extractParamsFromWeigthMap.js","webpack:///./node_modules/face-api.js/build/es6/ageGenderNet/AgeGenderNet.js","webpack:///./node_modules/face-api.js/build/es6/faceLandmarkNet/FaceLandmark68NetBase.js","webpack:///./node_modules/face-api.js/build/es6/faceLandmarkNet/FaceLandmark68Net.js","webpack:///./node_modules/face-api.js/build/es6/faceFeatureExtractor/extractParamsFromWeigthMapTiny.js","webpack:///./node_modules/face-api.js/build/es6/faceFeatureExtractor/extractParamsTiny.js","webpack:///./node_modules/face-api.js/build/es6/faceFeatureExtractor/TinyFaceFeatureExtractor.js","webpack:///./node_modules/face-api.js/build/es6/faceLandmarkNet/FaceLandmark68TinyNet.js","webpack:///./node_modules/face-api.js/build/es6/faceLandmarkNet/index.js","webpack:///./node_modules/face-api.js/build/es6/faceRecognitionNet/scaleLayer.js","webpack:///./node_modules/face-api.js/build/es6/faceRecognitionNet/convLayer.js","webpack:///./node_modules/face-api.js/build/es6/faceRecognitionNet/extractParams.js","webpack:///./node_modules/face-api.js/build/es6/faceRecognitionNet/extractParamsFromWeigthMap.js","webpack:///./node_modules/face-api.js/build/es6/faceRecognitionNet/residualLayer.js","webpack:///./node_modules/face-api.js/build/es6/faceRecognitionNet/FaceRecognitionNet.js","webpack:///./node_modules/face-api.js/build/es6/factories/WithFaceDescriptor.js","webpack:///./node_modules/face-api.js/build/es6/factories/WithAge.js","webpack:///./node_modules/face-api.js/build/es6/factories/WithGender.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/MtcnnOptions.js","webpack:///./node_modules/face-api.js/build/es6/ssdMobilenetv1/extractParams.js","webpack:///./node_modules/face-api.js/build/es6/ssdMobilenetv1/extractParamsFromWeigthMap.js","webpack:///./node_modules/face-api.js/build/es6/ssdMobilenetv1/pointwiseConvLayer.js","webpack:///./node_modules/face-api.js/build/es6/ssdMobilenetv1/mobileNetV1.js","webpack:///./node_modules/face-api.js/build/es6/ssdMobilenetv1/nonMaxSuppression.js","webpack:///./node_modules/face-api.js/build/es6/ssdMobilenetv1/outputLayer.js","webpack:///./node_modules/face-api.js/build/es6/ssdMobilenetv1/boxPredictionLayer.js","webpack:///./node_modules/face-api.js/build/es6/ssdMobilenetv1/predictionLayer.js","webpack:///./node_modules/face-api.js/build/es6/ssdMobilenetv1/SsdMobilenetv1Options.js","webpack:///./node_modules/face-api.js/build/es6/ssdMobilenetv1/SsdMobilenetv1.js","webpack:///./node_modules/face-api.js/build/es6/ssdMobilenetv1/index.js","webpack:///./node_modules/face-api.js/build/es6/tinyYolov2/TinyYolov2Options.js","webpack:///./node_modules/face-api.js/build/es6/tinyYolov2/const.js","webpack:///./node_modules/face-api.js/build/es6/tinyYolov2/config.js","webpack:///./node_modules/face-api.js/build/es6/tinyYolov2/leaky.js","webpack:///./node_modules/face-api.js/build/es6/tinyYolov2/convWithBatchNorm.js","webpack:///./node_modules/face-api.js/build/es6/tinyYolov2/depthwiseSeparableConv.js","webpack:///./node_modules/face-api.js/build/es6/tinyYolov2/extractParams.js","webpack:///./node_modules/face-api.js/build/es6/tinyYolov2/extractParamsFromWeigthMap.js","webpack:///./node_modules/face-api.js/build/es6/tinyYolov2/TinyYolov2Base.js","webpack:///./node_modules/face-api.js/build/es6/tinyYolov2/TinyYolov2.js","webpack:///./node_modules/face-api.js/build/es6/tinyFaceDetector/TinyFaceDetectorOptions.js","webpack:///./node_modules/face-api.js/build/es6/globalApi/ComposableTask.js","webpack:///./node_modules/face-api.js/build/es6/globalApi/extractFacesAndComputeResults.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/bgrToRgbTensor.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/config.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/extractParams.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/extractParamsFromWeigthMap.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/getSizesForScale.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/pyramidDown.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/MtcnnBox.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/normalize.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/prelu.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/sharedLayers.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/PNet.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/stage1.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/extractImagePatches.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/RNet.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/stage2.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/ONet.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/stage3.js","webpack:///./node_modules/face-api.js/build/es6/mtcnn/Mtcnn.js","webpack:///./node_modules/face-api.js/build/es6/tinyFaceDetector/const.js","webpack:///./node_modules/face-api.js/build/es6/tinyFaceDetector/TinyFaceDetector.js","webpack:///./node_modules/face-api.js/build/es6/globalApi/nets.js","webpack:///./node_modules/face-api.js/build/es6/globalApi/PredictFaceExpressionsTask.js","webpack:///./node_modules/face-api.js/build/es6/globalApi/PredictAgeAndGenderTask.js","webpack:///./node_modules/face-api.js/build/es6/globalApi/ComputeFaceDescriptorsTasks.js","webpack:///./node_modules/face-api.js/build/es6/globalApi/DetectFaceLandmarksTasks.js","webpack:///./node_modules/face-api.js/build/es6/globalApi/DetectFacesTasks.js","webpack:///./node_modules/face-api.js/build/es6/globalApi/detectFaces.js","webpack:///./node_modules/face-api.js/build/es6/euclideanDistance.js","webpack:///./node_modules/face-api.js/build/es6/globalApi/FaceMatcher.js","webpack:///./node_modules/face-api.js/build/es6/resizeResults.js","webpack:///src/views/ChatGPT/Facerecognition.vue","webpack:///./src/views/ChatGPT/Facerecognition.vue?8fa1","webpack:///./src/views/ChatGPT/Facerecognition.vue?7450","webpack:///./node_modules/core-js/internals/validate-arguments-length.js","webpack:///./node_modules/face-api.js/build/es6/env/createFileSystem.js"],"names":["defineBuiltIn","uncurryThis","toString","validateArgumentsLength","$URLSearchParams","URLSearchParams","URLSearchParamsPrototype","prototype","getAll","$has","has","params","undefined","name","length","arguments","$value","this","values","value","index","enumerable","unsafe","module","exports","DESCRIPTORS","defineBuiltInAccessor","forEach","get","count","configurable","createNodejsEnv","Canvas","global","Image","createCanvasElement","Error","createImageElement","fetch","fileSystem","CanvasRenderingContext2D","class_1","ImageData","class_2","Video","class_3","append","$delete","push","entries","v","k","key","entry","dindex","found","entriesLength","isNodejs","process","version","render","_vm","_c","_self","staticClass","_v","directives","rawName","imgEl","expression","attrs","require","on","$event","fnChange","_l","item","_s","Name","Math","floor","sex","years","_m","myvideoCanvas","videoChange","videoexpression","videosex","videoyears","Openlive","domProps","liveRun","myliveCanvas","cameraexpression","camerasex","camerayears","staticRenderFns","drawContour","ctx","points","isClosed","beginPath","slice","_a","prevIdx","x","y","from","moveTo","lineTo","to","stroke","Dimensions","width","height","isValidNumber","JSON","stringify","_width","_height","Object","defineProperty","reverse","isTensor","tensor","dim","shape","isTensor2D","isTensor3D","isTensor4D","isFloat","num","isEven","round","prec","f","pow","isDimensions","obj","computeReshapedDimensions","inputSize","scale","max","getCenterPoint","pts","reduce","sum","pt","add","Point","div","range","start","step","Array","fill","map","_","i","Infinity","isNaN","isValidProbablitiy","_x","_y","sub","mul","abs","magnitude","sqrt","Box","_box","allowNegativeDimensions","box","isBbox","left","top","right","bottom","every","isRect","assertIsValidBox","rect","callee","val","toSquare","diff","rescale","s","scaleX","scaleY","pad","padX","padY","clipAtImageBorders","imgWidth","imgHeight","clippedX","clippedY","newWidth","newHeight","clippedWidth","min","clippedHeight","shift","sx","sy","padAtBorders","imageHeight","imageWidth","w","h","dx","dy","edx","edy","ex","ey","calibrate","region","_super","BoundingBox","call","ObjectDetection","score","classScore","className","relativeBox","imageDims","_imageDims","_score","_classScore","_className","forSize","FaceDetection","iou","box1","box2","isIOU","interSection","area","minBbox","xs","ys","minX","minY","maxX","maxY","nonMaxSuppression","boxes","scores","iouThreshold","indicesSortedByScore","boxIndex","sort","c1","c2","c","pick","_loop_1","curr","pop","indices","outputs","idx","currBox","idxBox","filter","j","normalize","meanRgb","r","g","b","avg_r","avg_g","avg_b","avg_rgb","padToSquare","imgTensor","isCenterImage","dimDiff","paddingAmount","paddingAxis","createPaddingTensor","paddingTensorShape","paddingTensorAppend","remainingPaddingAmount","paddingTensorPrepend","tensorsToStack","t","toFloat","sigmoid","exp","Rect","relX","relY","relScale","FaceLandmarks","relativeFaceLandmarkPositions","imgDims","_imgDims","_shift","_positions","_this","constructor","relativePositions","shiftBy","shiftByPoint","align","detection","options","assign","useDlibAlignment","minBoxPadding","alignDlib","alignMinBbox","centers","getRefPointsForAlignment","leftEyeCenter","rightEyeCenter","mouthCenter","distToMouth","eyeToMouthDist","size","refPoint","padding","positions","FaceLandmarks5","apply","FaceLandmarks68","getJawOutline","getLeftEyeBrow","getRightEyeBrow","getNose","getLeftEye","getRightEye","getMouth","FaceMatch","label","distance","_label","_distance","withDistance","LabeledBox","assertIsValidLabeledBox","LabeledFaceDescriptors","descriptors","isArray","some","desc","Float32Array","_descriptors","toJSON","d","fromJSON","json","PredictedBox","assertIsValidPredictedBox","isWithFaceDetection","extendWithFaceDetection","sourceObj","extension","createBrowserEnv","window","readFile","HTMLCanvasElement","HTMLImageElement","HTMLVideoElement","document","createElement","isBrowser","environment","getEnv","setEnv","env","initialize","monkeyPatch","_b","AnchorPosition","createFileSystem","resolveInput","arg","getElementById","getContext2dOrThrow","canvasArg","canvas","getContext","DrawTextFieldOptions","anchorPosition","backgroundColor","fontColor","fontSize","fontStyle","TOP_LEFT","DrawTextField","text","anchor","measureWidth","l","measureText","w0","w1","measureHeight","getUpperLeft","canvasDims","isShiftLeft","BOTTOM_RIGHT","TOP_RIGHT","isShiftTop","BOTTOM_LEFT","textFieldWidth","textFieldHeight","newX","newY","draw","font","maxTextWidth","textHeight","fillStyle","upperLeft","fillRect","textLine","fillText","DrawBoxOptions","boxColor","lineWidth","drawLabelOptions","defaultDrawLabelOptions","DrawBox","strokeStyle","strokeRect","drawDetections","detections","detectionsArray","det","isMediaLoaded","media","complete","readyState","awaitMediaLoaded","Promise","resolve","reject","onLoad","e","currentTarget","removeEventListener","onError","addEventListener","bufferToImage","buf","Blob","reader","FileReader","onload","result","img","onerror","src","readAsDataURL","getMediaDimensions","input","naturalWidth","naturalHeight","videoWidth","videoHeight","createCanvas","createCanvasFromMedia","dims","putImageData","drawImage","imageTensorToCanvas","targetCanvas","numChannels","imgTensor3D","as3D","toInt","toPixels","sent","dispose","isMediaElement","imageToSquare","centerImage","inputCanvas","offset","NetInput","inputs","treatAsBatchInput","_imageTensors","_canvases","_treatAsBatchInput","_inputDimensions","_batchSize","batchSize","_inputSize","batchIdx","getReshapedInputDimensions","getInput","canvases","imageTensors","getInputDimensions","getInputHeight","getInputWidth","toBatchTensor","isCenterInputs","inputTensors","expandDims","resizeBilinear","fromPixels","batchTensor","as4D","toNetInput","inputArgArray","getIdxHint","inputArray","all","extractFaces","netInput","tensorOrCanvas","faceImg","getImageData","extractFaceTensors","imageTensor","faceTensors","fetchOrThrow","url","init","res","status","statusText","fetchJson","uri","getModelUris","defaultModelName","defaultManifestFilename","modelBaseUri","manifestUri","protocol","startsWith","replace","parts","split","manifestFile","endsWith","join","loadWeightMap","manifest","loadWeights","matchDimensions","reference","useMediaDimensions","NeuralNetwork","_name","_params","_paramMappings","getParamFromPath","paramPath","traversePropertyPath","objProp","reassignParamFromPath","getParamList","path","getTrainableParams","param","getFrozenParams","variable","freeze","dataSync","throwOnRedispose","isDisposed","serializeParams","flat","arr","concat","load","weightsOrUrl","extractWeights","loadFromUri","weightMap","getDefaultModelName","loadFromWeightMap","loadFromDisk","filePath","fetchWeightsFromDisk","_d","filePaths","then","buffer","weightsLoaderFactory","parse","extractParamsFromWeigthMap","paramMappings","weights","extractParams","nextObj","hasOwnProperty","depthwiseSeparableConv","stride","out","depthwise_filter","pointwise_filter","bias","denseBlock3","denseBlockParams","isFirstLayer","out1","conv0","filters","out2","conv1","in3","out3","conv2","denseBlock4","isScaleDown","in4","out4","conv3","convLayer","withRelu","disposeUnusedWeightTensors","keys","pm","originalPath","extractConvParamsFactory","channelsIn","channelsOut","filterSize","mappedPrefix","extractFCParamsFactory","fc_weights","fc_bias","SeparableConvParams","extractSeparableConvParamsFactory","loadSeparableConvParamsFactory","extractWeightEntry","prefix","extractWeightEntryFactory","paramRank","mappedPath","extractWeightsFactory","remainingWeights","numWeights","ret","getRemainingWeights","extractorsFactory","extractConvParams","extractSeparableConvParams","extractDenseBlock3Params","extractDenseBlock4Params","dense0","dense1","dense2","dense3","loadConvParamsFactory","loadParamsFactory","FaceFeatureExtractor","forwardInput","normalized","forward","fullyConnectedLayer","extractFCParams","fc","extractFcParams","seperateWeightMaps","featureExtractorMap","classifierMap","FaceProcessor","faceFeatureExtractor","_faceFeatureExtractor","runNet","bottleneckFeatures","as2D","loadClassifierParams","extractClassifierParams","getClassifierChannelsIn","getClassifierChannelsOut","cIn","cOut","classifierWeightSize","featureExtractorWeights","classifierWeights","FACE_EXPRESSION_LABELS","FaceExpressions","probabilities","asSortedArray","probability","e0","e1","FaceExpressionNet","predictExpressions","probabilitesByBatch","predictionsByBatch","data","probabilites","isBatchInput","isWithFaceExpressions","extendWithFaceExpressions","expressions","drawFaceExpressions","faceExpressions","minConfidence","textFieldAnchor","faceExpressionsArray","expr","sorted","resultsToDisplay","bottomLeft","drawTextField","isWithFaceLandmarks","extendWithFaceLandmarks","unshiftedLandmarks","landmarks","alignedRect","DrawFaceLandmarksOptions","drawLines","drawPoints","lineColor","pointSize","pointColor","DrawFaceLandmarks","faceLandmarks","drawPoint","arc","PI","drawFaceLandmarks","faceLandmarksArray","extractReductionBlockParams","separable_conv0","separable_conv1","expansion_conv","extractMainBlockParams","channels","separable_conv2","numMainBlocks","entry_flow_conv_in","entry_flow_reduction_block_0","entry_flow_reduction_block_1","entry_flow","conv_in","reduction_block_0","reduction_block_1","middle_flow","exit_flow_reduction_block","exit_flow_separable_conv","exit_flow","reduction_block","separable_conv","reductionBlock","isActivateInput","mainBlock","Gender","TinyXception","_numMainBlocks","age","gender","AgeGenderNet","pooled","as1D","predictAgeAndGender","ages","genders","ageAndGenderTensors","ageTensor","genderTensor","probMale","isMale","genderProbability","MALE","FEMALE","FaceLandmark68NetBase","postProcess","output","originalDimensions","inputDimensions","createInterleavedTensor","fillX","fillY","getPadding","cond","getPaddingX","getPaddingY","landmarkTensors","detectLandmarks","landmarksForBatch","landmarkTensor","landmarksArray","xCoords","yCoords","FaceLandmark68Net","extractParamsFromWeigthMapTiny","extractParamsTiny","TinyFaceFeatureExtractor","FaceLandmark68TinyNet","FaceLandmarkNet","biases","strides","conv","convNoRelu","convDown","extractFilterValues","numFilterValues","numFilters","depth","extractScaleLayerParams","extractConvLayerParams","extractResidualLayerParams","isDown","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","residual","residualDown","zeros","isPad","isAdjustShape","padShapeX","zerosW","padShapeY","zerosH","FaceRecognitionNet","globalAvg","mean","fullyConnected","computeFaceDescriptor","faceDescriptorTensors","faceDescriptorsForBatch","extendWithFaceDescriptor","descriptor","extendWithAge","extendWithGender","MtcnnOptions","minFaceSize","scaleFactor","maxNumScales","scoreThresholds","scaleSteps","_minFaceSize","_scaleFactor","_maxNumScales","_scoreThresholds","_scaleSteps","th","extractDepthwiseConvParams","batch_norm_scale","batch_norm_offset","batch_norm_mean","batch_norm_variance","isPointwiseConv","extractPointwiseConvParams","extractConvPairParams","depthwise_conv","pointwise_conv","extractMobilenetV1Params","conv_0","conv_1","conv_2","conv_3","conv_4","conv_5","conv_6","conv_7","conv_8","conv_9","conv_10","conv_11","conv_12","conv_13","extractPredictionLayerParams","box_encoding_0_predictor","class_predictor_0","box_encoding_1_predictor","class_predictor_1","box_encoding_2_predictor","class_predictor_2","box_encoding_3_predictor","class_predictor_3","box_encoding_4_predictor","class_predictor_4","box_encoding_5_predictor","class_predictor_5","box_predictor_0","box_encoding_predictor","class_predictor","box_predictor_1","box_predictor_2","box_predictor_3","box_predictor_4","box_predictor_5","mobilenetv1","prediction_layer","extra_dim","output_layer","prefixDepthwiseConv","mappedPrefixDepthwiseConv","mappedPrefixPointwiseConv","extractBoxPredictorParams","pointwiseConvLayer","epsilon","depthwiseConvLayer","getStridesForLayerIdx","layerIdx","mobileNetV1","conv11","convPairParams","depthwiseConvStrides","maxOutputSize","scoreThreshold","numBoxes","outputSize","candidates","suppressFunc","selected","originalScore","IOU","boxesData","arraySync","yminI","xminI","ymaxI","xmaxI","yminJ","xminJ","ymaxJ","xmaxJ","areaI","areaJ","intersectionYmin","intersectionXmin","intersectionYmax","intersectionXmax","intersectionArea","getCenterCoordinatesAndSizesLayer","vec","sizes","decodeBoxesLayer","x0","x1","div0_out","add0_out","div1_out","add1_out","outputLayer","boxPredictions","classPredictions","scoresAndClasses","boxesByBatch","scoresByBatch","boxPredictionLayer","boxPredictionEncoding","classPrediction","predictionLayer","conv4","conv5","conv6","conv7","boxPrediction0","boxPrediction1","boxPrediction2","boxPrediction3","boxPrediction4","boxPrediction5","SsdMobilenetv1Options","maxResults","_minConfidence","_maxResults","SsdMobilenetv1","features","locateFaces","_boxes","_scores","scoresData","reshapedDims","results","_e","FaceDetectionNet","TinyYolov2SizeType","IOU_THRESHOLD","BOX_ANCHORS","BOX_ANCHORS_SEPARABLE","MEAN_RGB_SEPARABLE","DEFAULT_MODEL_NAME","DEFAULT_MODEL_NAME_SEPARABLE_CONV","isNumber","validateConfig","config","withSeparableConvs","classes","anchors","a","leaky","convWithBatchNorm","bn","truediv","extractBatchNormParams","extractConvWithBatchNormParams","boxEncodingSize","filterSizes","s0","s1","s2","s3","s4","s5","s6","s7","s8","isFirstLayerConv2d","conv8","TinyYolov2Options","_scoreThreshold","TinyYolov2Base","_config","withClassScores","runTinyYolov2","runMobilenet","detect","forwardParams","out0","classScores","classNames","extractBoxes","DEFAULT_FILTER_SIZES","outputTensor","inputBlobDimensions","correctionFactorX","correctionFactorY","numCells","boxesTensor","scoresTensor","classScoresTensor","row","col","ctX","ctY","width_1","height_1","pos","reshaped","reshape","array","extractPredictedClass","classesTensor","classesData","TinyYolov2","objectDetections","TinyFaceDetectorOptions","ComposableTask","onfulfilled","run","extractAllFacesAndComputeResults","parentResults","computeResults","extractedFaces","getRectForAlignment","faceBoxes","faces","parentResult","extractSingleFaceAndComputeResult","computeResult","bgrToRgbTensor","CELL_STRIDE","CELL_SIZE","extractPReluParams","alpha","extractSharedParams","isRnet","prelu1_alpha","prelu2_alpha","prelu3_alpha","extractPNetParams","sharedParams","conv4_1","conv4_2","extractRNetParams","fc1","prelu4_alpha","fc2_1","fc2_2","extractONetParams","prelu5_alpha","fc2_3","pnet","rnet","onet","getSizesForScale","pyramidDown","m","scales","minLayer","MtcnnBox","prelu","sharedLayer","isPnet","PNet","prob","regions","rescaleAndNormalize","resized","extractBoundingBoxes","regionsTensor","boundingBoxes","cell","regionsData","stage1","stats","pnetOutputs","statsForScale","ts","Date","now","boxesForScale","bbox","nms","boxIdx","allBoxes","finalBoxes","finalScores","stage1_nms","extractImagePatches","imgCtx","bitmaps","imagePatchesDatas","fromX","fromY","imgData","createImageBitmap","bmp","patch","patchCtx","currData","imagePatchTensor","RNet","convOut","vectorized","prelu4","stage2","inputBoxes","rnetInputs","rnetOuts","filteredBoxes","filteredScores","indicesNms","regions_1","stage2_extractImagePatches","rnetInput","stage2_rnet","stage2_nms","ONet","prelu5","stage3","onetInputs","onetOuts","filteredRegions","stage3_extractImagePatches","onetInput","stage3_onet","stage3_nms","ptIdx","pointsData","Mtcnn","console","warn","tsTotal","onReturn","total","pyramid","total_stage1","stage2_numInputBoxes","total_stage2","stage3_numInputBoxes","total_stage3","forwardWithStats","MEAN_RGB","TinyFaceDetector","nets","ssdMobilenetv1","tinyFaceDetector","tinyYolov2","mtcnn","faceLandmark68Net","faceLandmark68TinyNet","faceRecognitionNet","faceExpressionNet","ageGenderNet","loadFaceLandmarkModel","loadFaceExpressionModel","loadAgeGenderModel","PredictFaceExpressionsTaskBase","parentTask","PredictAllFaceExpressionsTask","faceExpressionsByFace","face","withAgeAndGender","PredictSingleFaceExpressionsTask","PredictAllFaceExpressionsWithFaceAlignmentTask","withFaceDescriptors","PredictSingleFaceExpressionsWithFaceAlignmentTask","withFaceDescriptor","PredictAgeAndGenderTaskBase","PredictAllAgeAndGenderTask","ageAndGenderByFace","withFaceExpressions","PredictSingleAgeAndGenderTask","PredictAllAgeAndGenderWithFaceAlignmentTask","PredictSingleAgeAndGenderWithFaceAlignmentTask","ComputeFaceDescriptorsTaskBase","ComputeAllFaceDescriptorsTask","ComputeSingleFaceDescriptorTask","DetectFaceLandmarksTaskBase","useTinyLandmarkNet","DetectAllFaceLandmarksTask","faceLandmarksByFace","landmarkNet","DetectSingleFaceLandmarksTask","DetectFacesTaskBase","DetectAllFacesTask","faceDetectionFunction","runAndExtendWithFaceDetections","withFaceLandmarks","DetectSingleFaceTask","faceDetections","faceDetectionWithHighestScore","faceDetection","runAndExtendWithFaceDetection","detectAllFaces","euclideanDistance","arr1","arr2","desc1","desc2","FaceMatcher","distanceThreshold","_distanceThreshold","createUniqueLabel","_labeledDescriptors","computeMeanDistance","queryDescriptor","d1","d2","matchDescriptor","labeledDescriptors","best","findBestMatch","bestMatch","ld","dimensions","resizedDetection","resizedLandmarks","MODELS_URL","canvasEl","expressionName","angry","disgusted","fearful","happy","neutral","sad","surprised","timeout","videoEl","mylive","livetimeout","constraints","audio","video","ideal","frameRate","facingMode","mounted","$nextTick","fnInit","methods","faceapi","resizedResults","statunum","toFixed","withBoxes","target","files","clearRect","fnRun","fnPaused","paused","play","setTimeout","fnRunFaceAgeAndGender","pause","clearTimeout","resizeResult","URL","createObjectURL","stream","navigator","mediaDevices","getUserMedia","liveSuccess","catch","liveError","alert","srcObject","error","log","resizeResults","component","$TypeError","TypeError","passed","required","fs","requireFsError","err","rej"],"mappings":"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","file":"js/chunk-1c4393cb.1b754105.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Facerecognition.vue?vue&type=style&index=0&id=6cc2f6f3&prod&scoped=true&lang=css\"","'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\n\nvar $URLSearchParams = URLSearchParams;\nvar URLSearchParamsPrototype = $URLSearchParams.prototype;\nvar getAll = uncurryThis(URLSearchParamsPrototype.getAll);\nvar $has = uncurryThis(URLSearchParamsPrototype.has);\nvar params = new $URLSearchParams('a=1');\n\n// `undefined` case is a Chromium 117 bug\n// https://bugs.chromium.org/p/v8/issues/detail?id=14222\nif (params.has('a', 2) || !params.has('a', undefined)) {\n defineBuiltIn(URLSearchParamsPrototype, 'has', function has(name /* , value */) {\n var length = arguments.length;\n var $value = length < 2 ? undefined : arguments[1];\n if (length && $value === undefined) return $has(this, name);\n var values = getAll(this, name); // also validates `this`\n validateArgumentsLength(length, 1);\n var value = toString($value);\n var index = 0;\n while (index < values.length) {\n if (values[index++] === value) return true;\n } return false;\n }, { enumerable: true, unsafe: true });\n}\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAMAAAAPdrEwAAAAXVBMVEUAAABggb1ggb1fgb1fgbxhf71fgb1ggb1ggb1ggb5ggL5ggb1ggr1fgb1fgb1fgb5fgL1egL1hgL1ggLpigsRciLhggb1ggb1fgb1fgb1ggb0AHVFIaKIwT4cYNmx+o+nXAAAAGnRSTlMA3WWaPxzzicbBhey2q455RjYyKBIL6O7u6/dn0sEAAAIySURBVFjDzdkLboMwDAZgJ9AmQHmVRzsPuP8xx6pNSCueg91I/Q/wKYIkcmwISWtd6c0N19yNL51t4RVJc487yfJU5zZJgWSKpJG6fW2Qial7AXyqMCjV6SA8OAyOG47I9gMPZLTBcHfBg7l0gUtGQYIWnqAoCb8xMhQmY7bK1aA45vqfnJ5RkXMqkNX2dZOl9pX4gwbVMfv/MsMXJCP3sz6J4AyKz2WHz5mWeRbY3R9650aaP79zHL/Qn2OTH1km1ScZRnzKwxUt/GOALQ4JWoa7TT7t/cNPhb0dnIqgxXj1K/dI0HK7/6Frglbg9Q9tWPrwPjTwSIMUrVh486ATiuZw/pYqCFplF7AmRYpW4elK5xSts/OVzkhahfuVRoYm7ImzAVqGFi+8BUvTOtyCI2ml7aCkaR1egidppe3B0LQON3AnaaV9A6RpJa6htywCWmTztNaGWyz6rtx8W3Y2n+dp2SbxUMaiS3Avoae968nKaL4+sdDGOugtgJKekQgAeAnNV2oZUyywMJ2cKXFYmE7KFGZiGAu2nKRhJglTBNMwm4Yp3cUwGubBoSiva+aZRMJ8+sDH3fEXdcU9SXmYf5JCTtAyGB3z/F+kMI4D17QgYD42qNWyweJWC3TnHXtepgkPp4vX1orXjIvXQozc+IzfruWbzO/QwN7kSA39+GOI+MMT/bk82+iDKj52PAKPNtZQMB/eZZQZPoB9t7Hx77A723O9YNhNj+jvuOYWPqL/AnhbiRYPM+gcAAAAAElFTkSuQmCC\"","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\n\nvar URLSearchParamsPrototype = URLSearchParams.prototype;\nvar forEach = uncurryThis(URLSearchParamsPrototype.forEach);\n\n// `URLSearchParams.prototype.size` getter\n// https://github.com/whatwg/url/pull/734\nif (DESCRIPTORS && !('size' in URLSearchParamsPrototype)) {\n defineBuiltInAccessor(URLSearchParamsPrototype, 'size', {\n get: function size() {\n var count = 0;\n forEach(this, function () { count++; });\n return count;\n },\n configurable: true,\n enumerable: true\n });\n}\n","import { __assign } from \"tslib\";\r\nimport { createFileSystem } from './createFileSystem';\r\nexport function createNodejsEnv() {\r\n var Canvas = global['Canvas'] || global['HTMLCanvasElement'];\r\n var Image = global['Image'] || global['HTMLImageElement'];\r\n var createCanvasElement = function () {\r\n if (Canvas) {\r\n return new Canvas();\r\n }\r\n throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment');\r\n };\r\n var createImageElement = function () {\r\n if (Image) {\r\n return new Image();\r\n }\r\n throw new Error('createImageElement - missing Image implementation for nodejs environment');\r\n };\r\n var fetch = global['fetch'] || function () {\r\n throw new Error('fetch - missing fetch implementation for nodejs environment');\r\n };\r\n var fileSystem = createFileSystem();\r\n return __assign({ Canvas: Canvas || /** @class */ (function () {\r\n function Canvas() {\r\n }\r\n return Canvas;\r\n }()), CanvasRenderingContext2D: global['CanvasRenderingContext2D'] || /** @class */ (function () {\r\n function class_1() {\r\n }\r\n return class_1;\r\n }()), Image: Image || /** @class */ (function () {\r\n function Image() {\r\n }\r\n return Image;\r\n }()), ImageData: global['ImageData'] || /** @class */ (function () {\r\n function class_2() {\r\n }\r\n return class_2;\r\n }()), Video: global['HTMLVideoElement'] || /** @class */ (function () {\r\n function class_3() {\r\n }\r\n return class_3;\r\n }()), createCanvasElement: createCanvasElement,\r\n createImageElement: createImageElement,\r\n fetch: fetch }, fileSystem);\r\n}\r\n//# sourceMappingURL=createNodejsEnv.js.map","'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\n\nvar $URLSearchParams = URLSearchParams;\nvar URLSearchParamsPrototype = $URLSearchParams.prototype;\nvar append = uncurryThis(URLSearchParamsPrototype.append);\nvar $delete = uncurryThis(URLSearchParamsPrototype['delete']);\nvar forEach = uncurryThis(URLSearchParamsPrototype.forEach);\nvar push = uncurryThis([].push);\nvar params = new $URLSearchParams('a=1&a=2&b=3');\n\nparams['delete']('a', 1);\n// `undefined` case is a Chromium 117 bug\n// https://bugs.chromium.org/p/v8/issues/detail?id=14222\nparams['delete']('b', undefined);\n\nif (params + '' !== 'a=2') {\n defineBuiltIn(URLSearchParamsPrototype, 'delete', function (name /* , value */) {\n var length = arguments.length;\n var $value = length < 2 ? undefined : arguments[1];\n if (length && $value === undefined) return $delete(this, name);\n var entries = [];\n forEach(this, function (v, k) { // also validates `this`\n push(entries, { key: k, value: v });\n });\n validateArgumentsLength(length, 1);\n var key = toString(name);\n var value = toString($value);\n var index = 0;\n var dindex = 0;\n var found = false;\n var entriesLength = entries.length;\n var entry;\n while (index < entriesLength) {\n entry = entries[index++];\n if (found || entry.key === key) {\n found = true;\n $delete(this, entry.key);\n } else dindex++;\n }\n while (dindex < entriesLength) {\n entry = entries[dindex++];\n if (!(entry.key === key && entry.value === value)) append(this, entry.key, entry.value);\n }\n }, { enumerable: true, unsafe: true });\n}\n","export function isNodejs() {\r\n return typeof global === 'object'\r\n && typeof require === 'function'\r\n && typeof module !== 'undefined'\r\n // issues with gatsby.js: module.exports is undefined\r\n // && !!module.exports\r\n && typeof process !== 'undefined' && !!process.version;\r\n}\r\n//# sourceMappingURL=isNodejs.js.map","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAMAAAAPdrEwAAAAYFBMVEUAAABggb1fgb1egL1fgb1hf71fgb1ggr1ggb1ggb1ggb5ggb1ggL5ggb1ggr1fgb1fgr1fgL1fgb1fgb5ggr5hgL1ggLpigsRciLhggb0AHVEwT4cYNmxIaKJYebRXeLOFfqsZAAAAGXRSTlMA6mZDORzz3InGwd2F7rarm5mOeWIyKBILODE0CgAAAv9JREFUWMPNmeuS4kAIhTsaTWLieL8QYPf933KtWde2hA6k3dR4/s1Y88mcJgTo4FF5rDdNu4ab1m2zqY9l+B+adw0oWnXzN7nbApIqttn0y6ECQ9XhkgFe7MGl/WIk+FqDW/V1DHlWwAgVMzf4/AUj9XV2hgwZcgW+gyzt7MRYQaZWRqqcWshWdRosFkt4Q8vSIE/CPllkm53wZGGVjN83wbBa/SwHcoOZ+ocQh/JkVD4zUv8iQiO/fc8g9qrQ/VyeLbAf/lpP9IoULdZEiVrlsYN7Q2xbci08ZhAjekwpriGqNsgRQx52HckLixwp7PIkPjh7y+eIRpff+0dXAIpITwhnnvzrIQ7efEby5vfhjtbKkoIgQkTypWB17748QRM/PkKPJX97tq0no8WnRtjbb3RhoWVYZIZdpPzQzomZiBBVdsKRzgqa4u/iF5HlSKe/XFCExPRiPFuONDc0SEk7JIgMNIRQghCLoFGaz5YjZTgaaEplGxnoY6gNq1FDkwNdh42GlgFKNBt1ZBMaB7oXcqCbIFpT+a9yFroN66miXgfI8RrlYUsFsJLPheZcNCt+QJ+FFn+FRtA9KBLHqNcHsquKPMZWRQsSip+tU2xDozoijWR8fpeh3Ys0YQOK9HcfI3P8bsvqjbfdsz+W5ekImkQiDzbdKuIYSucwgI+Xr3M8KEMAI2xbOiGE0BgDgSlMTnkdqMJscmwW5qCLssmx6SveYRPoKmI7mWk3MejaxiY4L26ClOaxdc86S4SUKjFwSHYeGQ5xTMqAEwzoIoY7P5wYBrQXI2kSTq9cAdZH0uQTSU8LG0QkukGJkGMJTNhdW+M/K9sgUVvZGv/DTEcLuCjajj3O19D5ESaWXMT2qiWcl5CEx1mXkYisLDk711pIY8vHzL+MY9S4KTDsxq0QGZGesENpvcpafP76lrFoXky6rrWXzB+1wI5k1ZMqn1ydpruGmOzyZKorn+Vsuouqn79eG3kp2F0/5SrTfwH7adfGd3qnPkRNZ3InvKL/A4VidT94gd7yAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"face_expression_recognition\"},[_c('div',{staticClass:\"left\"},[_c('div',{staticClass:\"Imagerecognition\"},[_c('label',[_vm._v(\"更换图片\")]),_c('div',{staticClass:\"imgbg\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.imgEl!=null),expression:\"imgEl!=null\"}],staticClass:\"see imgsee\",attrs:{\"id\":\"imgsee\"}},[_c('img',{attrs:{\"id\":\"myImg\",\"src\":\"http://210.5.159.76:8095//File/TemporaryFile/Uploads/images/publicize/1.png\"}}),_c('canvas',{attrs:{\"id\":\"myCanvas\"}})]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.imgEl==null),expression:\"imgEl==null\"}],staticClass:\"default\"},[_c('img',{attrs:{\"src\":require(\"../../../public/img/img03.png\")}})])]),_c('input',{staticClass:\"updataimg\",attrs:{\"type\":\"file\",\"accept\":\"image/png, image/jpeg\"},on:{\"change\":function($event){return _vm.fnChange($event)}}})]),_c('div',{staticClass:\"result\"},[_vm._l((_vm.expression),function(item){return _c('div',{staticClass:\"emote\"},[_c('span',[_vm._v(_vm._s(item.Name))]),_c('span',[_vm._v(_vm._s(Math.floor(item.value*100))+\"%\")])])}),_c('div',{staticClass:\"gender item\"},[_c('span',[_vm._v(_vm._s(_vm.sex))]),_c('label',[_vm._v(\"性别\")])]),_c('div',{staticClass:\"age item\"},[_c('span',[_vm._v(_vm._s(_vm.years))]),_c('label',[_vm._v(\"年龄\")])])],2)]),_c('div',{staticClass:\"right\"},[_c('div',{staticClass:\"videorecognition\"},[_c('label',[_vm._v(\"上传视频\")]),_vm._m(0),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.myvideoCanvas==null),expression:\"myvideoCanvas==null\"}],staticClass:\"playicon\"},[_c('img',{attrs:{\"src\":require(\"../../../public/img/play.png\")}})]),_c('input',{attrs:{\"type\":\"file\",\"accept\":\"video/mp4, video/ogg, video/webm\"},on:{\"change\":function($event){return _vm.videoChange($event)}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.myvideoCanvas!=null),expression:\"myvideoCanvas!=null\"}],staticClass:\"Identifycontent\"},[_c('p',{staticClass:\"title\"},[_vm._v(\"识别信息\")]),_c('div',{staticClass:\"other\"},[_vm._l((_vm.videoexpression),function(item){return _c('p',[_vm._v(\"表情:\"+_vm._s(item.Name)+\" \"+_vm._s(item.value*100))])}),_c('p',[_vm._v(\"性别:\"+_vm._s(_vm.videosex))]),_c('p',[_vm._v(\"年龄:\"+_vm._s(_vm.videoyears))])],2)])]),_c('div',{staticClass:\"camerarecognition\",on:{\"click\":_vm.Openlive}},[_c('label',[_vm._v(\"打开摄像头\")]),_c('div',{staticClass:\"livesee\"},[_c('video',{attrs:{\"id\":\"mylive\",\"src\":\"\",\"muted\":\"\",\"loop\":\"\",\"playsinline\":\"\"},domProps:{\"muted\":true},on:{\"loadedmetadata\":_vm.liveRun}}),_c('canvas',{attrs:{\"id\":\"myliveCanvas\"}})]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.myliveCanvas==null),expression:\"myliveCanvas==null\"}],staticClass:\"playicon\"},[_c('img',{attrs:{\"src\":require(\"../../../public/img/img02.png\")}})]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.myliveCanvas!=null),expression:\"myliveCanvas!=null\"}],staticClass:\"Identifycontent\"},[_c('p',{staticClass:\"title\"},[_vm._v(\"识别信息\")]),_c('div',{staticClass:\"other\"},[_vm._l((_vm.cameraexpression),function(item){return _c('p',[_vm._v(\"表情:\"+_vm._s(item.Name)+\" \"+_vm._s(Math.floor(item.value*100)))])}),_c('p',[_vm._v(\"性别:\"+_vm._s(_vm.camerasex))]),_c('p',[_vm._v(\"年龄:\"+_vm._s(_vm.camerayears))])],2)])])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"videosee\"},[_c('video',{attrs:{\"id\":\"myVideo\",\"src\":\"\",\"playsinline\":\"\"}}),_c('canvas',{attrs:{\"id\":\"myvideoCanvas\"}})])\n}]\n\nexport { render, staticRenderFns }","export function drawContour(ctx, points, isClosed) {\r\n if (isClosed === void 0) { isClosed = false; }\r\n ctx.beginPath();\r\n points.slice(1).forEach(function (_a, prevIdx) {\r\n var x = _a.x, y = _a.y;\r\n var from = points[prevIdx];\r\n ctx.moveTo(from.x, from.y);\r\n ctx.lineTo(x, y);\r\n });\r\n if (isClosed) {\r\n var from = points[points.length - 1];\r\n var to = points[0];\r\n if (!from || !to) {\r\n return;\r\n }\r\n ctx.moveTo(from.x, from.y);\r\n ctx.lineTo(to.x, to.y);\r\n }\r\n ctx.stroke();\r\n}\r\n//# sourceMappingURL=drawContour.js.map","import { isValidNumber } from '../utils';\r\nvar Dimensions = /** @class */ (function () {\r\n function Dimensions(width, height) {\r\n if (!isValidNumber(width) || !isValidNumber(height)) {\r\n throw new Error(\"Dimensions.constructor - expected width and height to be valid numbers, instead have \" + JSON.stringify({ width: width, height: height }));\r\n }\r\n this._width = width;\r\n this._height = height;\r\n }\r\n Object.defineProperty(Dimensions.prototype, \"width\", {\r\n get: function () { return this._width; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Dimensions.prototype, \"height\", {\r\n get: function () { return this._height; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Dimensions.prototype.reverse = function () {\r\n return new Dimensions(1 / this.width, 1 / this.height);\r\n };\r\n return Dimensions;\r\n}());\r\nexport { Dimensions };\r\n//# sourceMappingURL=Dimensions.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { Point } from '../classes';\r\nimport { Dimensions } from '../classes/Dimensions';\r\nexport function isTensor(tensor, dim) {\r\n return tensor instanceof tf.Tensor && tensor.shape.length === dim;\r\n}\r\nexport function isTensor1D(tensor) {\r\n return isTensor(tensor, 1);\r\n}\r\nexport function isTensor2D(tensor) {\r\n return isTensor(tensor, 2);\r\n}\r\nexport function isTensor3D(tensor) {\r\n return isTensor(tensor, 3);\r\n}\r\nexport function isTensor4D(tensor) {\r\n return isTensor(tensor, 4);\r\n}\r\nexport function isFloat(num) {\r\n return num % 1 !== 0;\r\n}\r\nexport function isEven(num) {\r\n return num % 2 === 0;\r\n}\r\nexport function round(num, prec) {\r\n if (prec === void 0) { prec = 2; }\r\n var f = Math.pow(10, prec);\r\n return Math.floor(num * f) / f;\r\n}\r\nexport function isDimensions(obj) {\r\n return obj && obj.width && obj.height;\r\n}\r\nexport function computeReshapedDimensions(_a, inputSize) {\r\n var width = _a.width, height = _a.height;\r\n var scale = inputSize / Math.max(height, width);\r\n return new Dimensions(Math.round(width * scale), Math.round(height * scale));\r\n}\r\nexport function getCenterPoint(pts) {\r\n return pts.reduce(function (sum, pt) { return sum.add(pt); }, new Point(0, 0))\r\n .div(new Point(pts.length, pts.length));\r\n}\r\nexport function range(num, start, step) {\r\n return Array(num).fill(0).map(function (_, i) { return start + (i * step); });\r\n}\r\nexport function isValidNumber(num) {\r\n return !!num && num !== Infinity && num !== -Infinity && !isNaN(num) || num === 0;\r\n}\r\nexport function isValidProbablitiy(num) {\r\n return isValidNumber(num) && 0 <= num && num <= 1.0;\r\n}\r\n//# sourceMappingURL=index.js.map","var Point = /** @class */ (function () {\r\n function Point(x, y) {\r\n this._x = x;\r\n this._y = y;\r\n }\r\n Object.defineProperty(Point.prototype, \"x\", {\r\n get: function () { return this._x; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Point.prototype, \"y\", {\r\n get: function () { return this._y; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Point.prototype.add = function (pt) {\r\n return new Point(this.x + pt.x, this.y + pt.y);\r\n };\r\n Point.prototype.sub = function (pt) {\r\n return new Point(this.x - pt.x, this.y - pt.y);\r\n };\r\n Point.prototype.mul = function (pt) {\r\n return new Point(this.x * pt.x, this.y * pt.y);\r\n };\r\n Point.prototype.div = function (pt) {\r\n return new Point(this.x / pt.x, this.y / pt.y);\r\n };\r\n Point.prototype.abs = function () {\r\n return new Point(Math.abs(this.x), Math.abs(this.y));\r\n };\r\n Point.prototype.magnitude = function () {\r\n return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));\r\n };\r\n Point.prototype.floor = function () {\r\n return new Point(Math.floor(this.x), Math.floor(this.y));\r\n };\r\n return Point;\r\n}());\r\nexport { Point };\r\n//# sourceMappingURL=Point.js.map","import { isDimensions, isValidNumber } from '../utils';\r\nimport { Point } from './Point';\r\nvar Box = /** @class */ (function () {\r\n function Box(_box, allowNegativeDimensions) {\r\n if (allowNegativeDimensions === void 0) { allowNegativeDimensions = true; }\r\n var box = (_box || {});\r\n var isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber);\r\n var isRect = [box.x, box.y, box.width, box.height].every(isValidNumber);\r\n if (!isRect && !isBbox) {\r\n throw new Error(\"Box.constructor - expected box to be IBoundingBox | IRect, instead have \" + JSON.stringify(box));\r\n }\r\n var _a = isRect\r\n ? [box.x, box.y, box.width, box.height]\r\n : [box.left, box.top, box.right - box.left, box.bottom - box.top], x = _a[0], y = _a[1], width = _a[2], height = _a[3];\r\n Box.assertIsValidBox({ x: x, y: y, width: width, height: height }, 'Box.constructor', allowNegativeDimensions);\r\n this._x = x;\r\n this._y = y;\r\n this._width = width;\r\n this._height = height;\r\n }\r\n Box.isRect = function (rect) {\r\n return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber);\r\n };\r\n Box.assertIsValidBox = function (box, callee, allowNegativeDimensions) {\r\n if (allowNegativeDimensions === void 0) { allowNegativeDimensions = false; }\r\n if (!Box.isRect(box)) {\r\n throw new Error(callee + \" - invalid box: \" + JSON.stringify(box) + \", expected object with properties x, y, width, height\");\r\n }\r\n if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) {\r\n throw new Error(callee + \" - width (\" + box.width + \") and height (\" + box.height + \") must be positive numbers\");\r\n }\r\n };\r\n Object.defineProperty(Box.prototype, \"x\", {\r\n get: function () { return this._x; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"y\", {\r\n get: function () { return this._y; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"width\", {\r\n get: function () { return this._width; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"height\", {\r\n get: function () { return this._height; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"left\", {\r\n get: function () { return this.x; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"top\", {\r\n get: function () { return this.y; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"right\", {\r\n get: function () { return this.x + this.width; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"bottom\", {\r\n get: function () { return this.y + this.height; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"area\", {\r\n get: function () { return this.width * this.height; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"topLeft\", {\r\n get: function () { return new Point(this.left, this.top); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"topRight\", {\r\n get: function () { return new Point(this.right, this.top); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"bottomLeft\", {\r\n get: function () { return new Point(this.left, this.bottom); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"bottomRight\", {\r\n get: function () { return new Point(this.right, this.bottom); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Box.prototype.round = function () {\r\n var _a = [this.x, this.y, this.width, this.height]\r\n .map(function (val) { return Math.round(val); }), x = _a[0], y = _a[1], width = _a[2], height = _a[3];\r\n return new Box({ x: x, y: y, width: width, height: height });\r\n };\r\n Box.prototype.floor = function () {\r\n var _a = [this.x, this.y, this.width, this.height]\r\n .map(function (val) { return Math.floor(val); }), x = _a[0], y = _a[1], width = _a[2], height = _a[3];\r\n return new Box({ x: x, y: y, width: width, height: height });\r\n };\r\n Box.prototype.toSquare = function () {\r\n var _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n var diff = Math.abs(width - height);\r\n if (width < height) {\r\n x -= (diff / 2);\r\n width += diff;\r\n }\r\n if (height < width) {\r\n y -= (diff / 2);\r\n height += diff;\r\n }\r\n return new Box({ x: x, y: y, width: width, height: height });\r\n };\r\n Box.prototype.rescale = function (s) {\r\n var scaleX = isDimensions(s) ? s.width : s;\r\n var scaleY = isDimensions(s) ? s.height : s;\r\n return new Box({\r\n x: this.x * scaleX,\r\n y: this.y * scaleY,\r\n width: this.width * scaleX,\r\n height: this.height * scaleY\r\n });\r\n };\r\n Box.prototype.pad = function (padX, padY) {\r\n var _a = [\r\n this.x - (padX / 2),\r\n this.y - (padY / 2),\r\n this.width + padX,\r\n this.height + padY\r\n ], x = _a[0], y = _a[1], width = _a[2], height = _a[3];\r\n return new Box({ x: x, y: y, width: width, height: height });\r\n };\r\n Box.prototype.clipAtImageBorders = function (imgWidth, imgHeight) {\r\n var _a = this, x = _a.x, y = _a.y, right = _a.right, bottom = _a.bottom;\r\n var clippedX = Math.max(x, 0);\r\n var clippedY = Math.max(y, 0);\r\n var newWidth = right - clippedX;\r\n var newHeight = bottom - clippedY;\r\n var clippedWidth = Math.min(newWidth, imgWidth - clippedX);\r\n var clippedHeight = Math.min(newHeight, imgHeight - clippedY);\r\n return (new Box({ x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight })).floor();\r\n };\r\n Box.prototype.shift = function (sx, sy) {\r\n var _a = this, width = _a.width, height = _a.height;\r\n var x = this.x + sx;\r\n var y = this.y + sy;\r\n return new Box({ x: x, y: y, width: width, height: height });\r\n };\r\n Box.prototype.padAtBorders = function (imageHeight, imageWidth) {\r\n var w = this.width + 1;\r\n var h = this.height + 1;\r\n var dx = 1;\r\n var dy = 1;\r\n var edx = w;\r\n var edy = h;\r\n var x = this.left;\r\n var y = this.top;\r\n var ex = this.right;\r\n var ey = this.bottom;\r\n if (ex > imageWidth) {\r\n edx = -ex + imageWidth + w;\r\n ex = imageWidth;\r\n }\r\n if (ey > imageHeight) {\r\n edy = -ey + imageHeight + h;\r\n ey = imageHeight;\r\n }\r\n if (x < 1) {\r\n edy = 2 - x;\r\n x = 1;\r\n }\r\n if (y < 1) {\r\n edy = 2 - y;\r\n y = 1;\r\n }\r\n return { dy: dy, edy: edy, dx: dx, edx: edx, y: y, ey: ey, x: x, ex: ex, w: w, h: h };\r\n };\r\n Box.prototype.calibrate = function (region) {\r\n return new Box({\r\n left: this.left + (region.left * this.width),\r\n top: this.top + (region.top * this.height),\r\n right: this.right + (region.right * this.width),\r\n bottom: this.bottom + (region.bottom * this.height)\r\n }).toSquare().round();\r\n };\r\n return Box;\r\n}());\r\nexport { Box };\r\n//# sourceMappingURL=Box.js.map","import { __extends } from \"tslib\";\r\nimport { Box } from './Box';\r\nvar BoundingBox = /** @class */ (function (_super) {\r\n __extends(BoundingBox, _super);\r\n function BoundingBox(left, top, right, bottom, allowNegativeDimensions) {\r\n if (allowNegativeDimensions === void 0) { allowNegativeDimensions = false; }\r\n return _super.call(this, { left: left, top: top, right: right, bottom: bottom }, allowNegativeDimensions) || this;\r\n }\r\n return BoundingBox;\r\n}(Box));\r\nexport { BoundingBox };\r\n//# sourceMappingURL=BoundingBox.js.map","import { Box } from './Box';\r\nimport { Dimensions } from './Dimensions';\r\nvar ObjectDetection = /** @class */ (function () {\r\n function ObjectDetection(score, classScore, className, relativeBox, imageDims) {\r\n this._imageDims = new Dimensions(imageDims.width, imageDims.height);\r\n this._score = score;\r\n this._classScore = classScore;\r\n this._className = className;\r\n this._box = new Box(relativeBox).rescale(this._imageDims);\r\n }\r\n Object.defineProperty(ObjectDetection.prototype, \"score\", {\r\n get: function () { return this._score; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"classScore\", {\r\n get: function () { return this._classScore; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"className\", {\r\n get: function () { return this._className; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"box\", {\r\n get: function () { return this._box; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"imageDims\", {\r\n get: function () { return this._imageDims; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"imageWidth\", {\r\n get: function () { return this.imageDims.width; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"imageHeight\", {\r\n get: function () { return this.imageDims.height; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"relativeBox\", {\r\n get: function () { return new Box(this._box).rescale(this.imageDims.reverse()); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ObjectDetection.prototype.forSize = function (width, height) {\r\n return new ObjectDetection(this.score, this.classScore, this.className, this.relativeBox, { width: width, height: height });\r\n };\r\n return ObjectDetection;\r\n}());\r\nexport { ObjectDetection };\r\n//# sourceMappingURL=ObjectDetection.js.map","import { __extends } from \"tslib\";\r\nimport { ObjectDetection } from './ObjectDetection';\r\nvar FaceDetection = /** @class */ (function (_super) {\r\n __extends(FaceDetection, _super);\r\n function FaceDetection(score, relativeBox, imageDims) {\r\n return _super.call(this, score, score, '', relativeBox, imageDims) || this;\r\n }\r\n FaceDetection.prototype.forSize = function (width, height) {\r\n var _a = _super.prototype.forSize.call(this, width, height), score = _a.score, relativeBox = _a.relativeBox, imageDims = _a.imageDims;\r\n return new FaceDetection(score, relativeBox, imageDims);\r\n };\r\n return FaceDetection;\r\n}(ObjectDetection));\r\nexport { FaceDetection };\r\n//# sourceMappingURL=FaceDetection.js.map","export function iou(box1, box2, isIOU) {\r\n if (isIOU === void 0) { isIOU = true; }\r\n var width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left));\r\n var height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top));\r\n var interSection = width * height;\r\n return isIOU\r\n ? interSection / (box1.area + box2.area - interSection)\r\n : interSection / Math.min(box1.area, box2.area);\r\n}\r\n//# sourceMappingURL=iou.js.map","import { BoundingBox } from '../classes';\r\nexport function minBbox(pts) {\r\n var xs = pts.map(function (pt) { return pt.x; });\r\n var ys = pts.map(function (pt) { return pt.y; });\r\n var minX = xs.reduce(function (min, x) { return x < min ? x : min; }, Infinity);\r\n var minY = ys.reduce(function (min, y) { return y < min ? y : min; }, Infinity);\r\n var maxX = xs.reduce(function (max, x) { return max < x ? x : max; }, 0);\r\n var maxY = ys.reduce(function (max, y) { return max < y ? y : max; }, 0);\r\n return new BoundingBox(minX, minY, maxX, maxY);\r\n}\r\n//# sourceMappingURL=minBbox.js.map","import { iou } from './iou';\r\nexport function nonMaxSuppression(boxes, scores, iouThreshold, isIOU) {\r\n if (isIOU === void 0) { isIOU = true; }\r\n var indicesSortedByScore = scores\r\n .map(function (score, boxIndex) { return ({ score: score, boxIndex: boxIndex }); })\r\n .sort(function (c1, c2) { return c1.score - c2.score; })\r\n .map(function (c) { return c.boxIndex; });\r\n var pick = [];\r\n var _loop_1 = function () {\r\n var curr = indicesSortedByScore.pop();\r\n pick.push(curr);\r\n var indices = indicesSortedByScore;\r\n var outputs = [];\r\n for (var i = 0; i < indices.length; i++) {\r\n var idx = indices[i];\r\n var currBox = boxes[curr];\r\n var idxBox = boxes[idx];\r\n outputs.push(iou(currBox, idxBox, isIOU));\r\n }\r\n indicesSortedByScore = indicesSortedByScore.filter(function (_, j) { return outputs[j] <= iouThreshold; });\r\n };\r\n while (indicesSortedByScore.length > 0) {\r\n _loop_1();\r\n }\r\n return pick;\r\n}\r\n//# sourceMappingURL=nonMaxSuppression.js.map","import { __spreadArrays } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nexport function normalize(x, meanRgb) {\r\n return tf.tidy(function () {\r\n var r = meanRgb[0], g = meanRgb[1], b = meanRgb[2];\r\n var avg_r = tf.fill(__spreadArrays(x.shape.slice(0, 3), [1]), r);\r\n var avg_g = tf.fill(__spreadArrays(x.shape.slice(0, 3), [1]), g);\r\n var avg_b = tf.fill(__spreadArrays(x.shape.slice(0, 3), [1]), b);\r\n var avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);\r\n return tf.sub(x, avg_rgb);\r\n });\r\n}\r\n//# sourceMappingURL=normalize.js.map","import * as tf from '@tensorflow/tfjs-core';\r\n/**\r\n * Pads the smaller dimension of an image tensor with zeros, such that width === height.\r\n *\r\n * @param imgTensor The image tensor.\r\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\r\n * both sides of the minor dimension oof the image.\r\n * @returns The padded tensor with width === height.\r\n */\r\nexport function padToSquare(imgTensor, isCenterImage) {\r\n if (isCenterImage === void 0) { isCenterImage = false; }\r\n return tf.tidy(function () {\r\n var _a = imgTensor.shape.slice(1), height = _a[0], width = _a[1];\r\n if (height === width) {\r\n return imgTensor;\r\n }\r\n var dimDiff = Math.abs(height - width);\r\n var paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1));\r\n var paddingAxis = height > width ? 2 : 1;\r\n var createPaddingTensor = function (paddingAmount) {\r\n var paddingTensorShape = imgTensor.shape.slice();\r\n paddingTensorShape[paddingAxis] = paddingAmount;\r\n return tf.fill(paddingTensorShape, 0);\r\n };\r\n var paddingTensorAppend = createPaddingTensor(paddingAmount);\r\n var remainingPaddingAmount = dimDiff - paddingTensorAppend.shape[paddingAxis];\r\n var paddingTensorPrepend = isCenterImage && remainingPaddingAmount\r\n ? createPaddingTensor(remainingPaddingAmount)\r\n : null;\r\n var tensorsToStack = [\r\n paddingTensorPrepend,\r\n imgTensor,\r\n paddingTensorAppend\r\n ]\r\n .filter(function (t) { return !!t; })\r\n .map(function (t) { return t.toFloat(); });\r\n return tf.concat(tensorsToStack, paddingAxis);\r\n });\r\n}\r\n//# sourceMappingURL=padToSquare.js.map","export * from './iou';\r\nexport * from './minBbox';\r\nexport * from './nonMaxSuppression';\r\nexport * from './normalize';\r\nexport * from './padToSquare';\r\nexport * from './shuffleArray';\r\nexport function sigmoid(x) {\r\n return 1 / (1 + Math.exp(-x));\r\n}\r\nexport function inverseSigmoid(x) {\r\n return Math.log(x / (1 - x));\r\n}\r\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\r\nimport { Box } from './Box';\r\nvar Rect = /** @class */ (function (_super) {\r\n __extends(Rect, _super);\r\n function Rect(x, y, width, height, allowNegativeDimensions) {\r\n if (allowNegativeDimensions === void 0) { allowNegativeDimensions = false; }\r\n return _super.call(this, { x: x, y: y, width: width, height: height }, allowNegativeDimensions) || this;\r\n }\r\n return Rect;\r\n}(Box));\r\nexport { Rect };\r\n//# sourceMappingURL=Rect.js.map","import { minBbox } from '../ops';\r\nimport { getCenterPoint } from '../utils';\r\nimport { Box } from './Box';\r\nimport { Dimensions } from './Dimensions';\r\nimport { FaceDetection } from './FaceDetection';\r\nimport { Point } from './Point';\r\nimport { Rect } from './Rect';\r\n// face alignment constants\r\nvar relX = 0.5;\r\nvar relY = 0.43;\r\nvar relScale = 0.45;\r\nvar FaceLandmarks = /** @class */ (function () {\r\n function FaceLandmarks(relativeFaceLandmarkPositions, imgDims, shift) {\r\n if (shift === void 0) { shift = new Point(0, 0); }\r\n var width = imgDims.width, height = imgDims.height;\r\n this._imgDims = new Dimensions(width, height);\r\n this._shift = shift;\r\n this._positions = relativeFaceLandmarkPositions.map(function (pt) { return pt.mul(new Point(width, height)).add(shift); });\r\n }\r\n Object.defineProperty(FaceLandmarks.prototype, \"shift\", {\r\n get: function () { return new Point(this._shift.x, this._shift.y); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FaceLandmarks.prototype, \"imageWidth\", {\r\n get: function () { return this._imgDims.width; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FaceLandmarks.prototype, \"imageHeight\", {\r\n get: function () { return this._imgDims.height; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FaceLandmarks.prototype, \"positions\", {\r\n get: function () { return this._positions; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FaceLandmarks.prototype, \"relativePositions\", {\r\n get: function () {\r\n var _this = this;\r\n return this._positions.map(function (pt) { return pt.sub(_this._shift).div(new Point(_this.imageWidth, _this.imageHeight)); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n FaceLandmarks.prototype.forSize = function (width, height) {\r\n return new this.constructor(this.relativePositions, { width: width, height: height });\r\n };\r\n FaceLandmarks.prototype.shiftBy = function (x, y) {\r\n return new this.constructor(this.relativePositions, this._imgDims, new Point(x, y));\r\n };\r\n FaceLandmarks.prototype.shiftByPoint = function (pt) {\r\n return this.shiftBy(pt.x, pt.y);\r\n };\r\n /**\r\n * Aligns the face landmarks after face detection from the relative positions of the faces\r\n * bounding box, or it's current shift. This function should be used to align the face images\r\n * after face detection has been performed, before they are passed to the face recognition net.\r\n * This will make the computed face descriptor more accurate.\r\n *\r\n * @param detection (optional) The bounding box of the face or the face detection result. If\r\n * no argument was passed the position of the face landmarks are assumed to be relative to\r\n * it's current shift.\r\n * @returns The bounding box of the aligned face.\r\n */\r\n FaceLandmarks.prototype.align = function (detection, options) {\r\n if (options === void 0) { options = {}; }\r\n if (detection) {\r\n var box = detection instanceof FaceDetection\r\n ? detection.box.floor()\r\n : new Box(detection);\r\n return this.shiftBy(box.x, box.y).align(null, options);\r\n }\r\n var _a = Object.assign({}, { useDlibAlignment: false, minBoxPadding: 0.2 }, options), useDlibAlignment = _a.useDlibAlignment, minBoxPadding = _a.minBoxPadding;\r\n if (useDlibAlignment) {\r\n return this.alignDlib();\r\n }\r\n return this.alignMinBbox(minBoxPadding);\r\n };\r\n FaceLandmarks.prototype.alignDlib = function () {\r\n var centers = this.getRefPointsForAlignment();\r\n var leftEyeCenter = centers[0], rightEyeCenter = centers[1], mouthCenter = centers[2];\r\n var distToMouth = function (pt) { return mouthCenter.sub(pt).magnitude(); };\r\n var eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2;\r\n var size = Math.floor(eyeToMouthDist / relScale);\r\n var refPoint = getCenterPoint(centers);\r\n // TODO: pad in case rectangle is out of image bounds\r\n var x = Math.floor(Math.max(0, refPoint.x - (relX * size)));\r\n var y = Math.floor(Math.max(0, refPoint.y - (relY * size)));\r\n return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y));\r\n };\r\n FaceLandmarks.prototype.alignMinBbox = function (padding) {\r\n var box = minBbox(this.positions);\r\n return box.pad(box.width * padding, box.height * padding);\r\n };\r\n FaceLandmarks.prototype.getRefPointsForAlignment = function () {\r\n throw new Error('getRefPointsForAlignment not implemented by base class');\r\n };\r\n return FaceLandmarks;\r\n}());\r\nexport { FaceLandmarks };\r\n//# sourceMappingURL=FaceLandmarks.js.map","import { __extends } from \"tslib\";\r\nimport { getCenterPoint } from '../utils';\r\nimport { FaceLandmarks } from './FaceLandmarks';\r\nvar FaceLandmarks5 = /** @class */ (function (_super) {\r\n __extends(FaceLandmarks5, _super);\r\n function FaceLandmarks5() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n FaceLandmarks5.prototype.getRefPointsForAlignment = function () {\r\n var pts = this.positions;\r\n return [\r\n pts[0],\r\n pts[1],\r\n getCenterPoint([pts[3], pts[4]])\r\n ];\r\n };\r\n return FaceLandmarks5;\r\n}(FaceLandmarks));\r\nexport { FaceLandmarks5 };\r\n//# sourceMappingURL=FaceLandmarks5.js.map","import { __extends } from \"tslib\";\r\nimport { getCenterPoint } from '../utils';\r\nimport { FaceLandmarks } from './FaceLandmarks';\r\nvar FaceLandmarks68 = /** @class */ (function (_super) {\r\n __extends(FaceLandmarks68, _super);\r\n function FaceLandmarks68() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n FaceLandmarks68.prototype.getJawOutline = function () {\r\n return this.positions.slice(0, 17);\r\n };\r\n FaceLandmarks68.prototype.getLeftEyeBrow = function () {\r\n return this.positions.slice(17, 22);\r\n };\r\n FaceLandmarks68.prototype.getRightEyeBrow = function () {\r\n return this.positions.slice(22, 27);\r\n };\r\n FaceLandmarks68.prototype.getNose = function () {\r\n return this.positions.slice(27, 36);\r\n };\r\n FaceLandmarks68.prototype.getLeftEye = function () {\r\n return this.positions.slice(36, 42);\r\n };\r\n FaceLandmarks68.prototype.getRightEye = function () {\r\n return this.positions.slice(42, 48);\r\n };\r\n FaceLandmarks68.prototype.getMouth = function () {\r\n return this.positions.slice(48, 68);\r\n };\r\n FaceLandmarks68.prototype.getRefPointsForAlignment = function () {\r\n return [\r\n this.getLeftEye(),\r\n this.getRightEye(),\r\n this.getMouth()\r\n ].map(getCenterPoint);\r\n };\r\n return FaceLandmarks68;\r\n}(FaceLandmarks));\r\nexport { FaceLandmarks68 };\r\n//# sourceMappingURL=FaceLandmarks68.js.map","import { round } from '../utils';\r\nvar FaceMatch = /** @class */ (function () {\r\n function FaceMatch(label, distance) {\r\n this._label = label;\r\n this._distance = distance;\r\n }\r\n Object.defineProperty(FaceMatch.prototype, \"label\", {\r\n get: function () { return this._label; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FaceMatch.prototype, \"distance\", {\r\n get: function () { return this._distance; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n FaceMatch.prototype.toString = function (withDistance) {\r\n if (withDistance === void 0) { withDistance = true; }\r\n return \"\" + this.label + (withDistance ? \" (\" + round(this.distance) + \")\" : '');\r\n };\r\n return FaceMatch;\r\n}());\r\nexport { FaceMatch };\r\n//# sourceMappingURL=FaceMatch.js.map","import { __extends } from \"tslib\";\r\nimport { isValidNumber } from '../utils';\r\nimport { Box } from './Box';\r\nvar LabeledBox = /** @class */ (function (_super) {\r\n __extends(LabeledBox, _super);\r\n function LabeledBox(box, label) {\r\n var _this = _super.call(this, box) || this;\r\n _this._label = label;\r\n return _this;\r\n }\r\n LabeledBox.assertIsValidLabeledBox = function (box, callee) {\r\n Box.assertIsValidBox(box, callee);\r\n if (!isValidNumber(box.label)) {\r\n throw new Error(callee + \" - expected property label (\" + box.label + \") to be a number\");\r\n }\r\n };\r\n Object.defineProperty(LabeledBox.prototype, \"label\", {\r\n get: function () { return this._label; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return LabeledBox;\r\n}(Box));\r\nexport { LabeledBox };\r\n//# sourceMappingURL=LabeledBox.js.map","var LabeledFaceDescriptors = /** @class */ (function () {\r\n function LabeledFaceDescriptors(label, descriptors) {\r\n if (!(typeof label === 'string')) {\r\n throw new Error('LabeledFaceDescriptors - constructor expected label to be a string');\r\n }\r\n if (!Array.isArray(descriptors) || descriptors.some(function (desc) { return !(desc instanceof Float32Array); })) {\r\n throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array');\r\n }\r\n this._label = label;\r\n this._descriptors = descriptors;\r\n }\r\n Object.defineProperty(LabeledFaceDescriptors.prototype, \"label\", {\r\n get: function () { return this._label; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LabeledFaceDescriptors.prototype, \"descriptors\", {\r\n get: function () { return this._descriptors; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n LabeledFaceDescriptors.prototype.toJSON = function () {\r\n return {\r\n label: this.label,\r\n descriptors: this.descriptors.map(function (d) { return Array.from(d); })\r\n };\r\n };\r\n LabeledFaceDescriptors.fromJSON = function (json) {\r\n var descriptors = json.descriptors.map(function (d) {\r\n return new Float32Array(d);\r\n });\r\n return new LabeledFaceDescriptors(json.label, descriptors);\r\n };\r\n return LabeledFaceDescriptors;\r\n}());\r\nexport { LabeledFaceDescriptors };\r\n//# sourceMappingURL=LabeledFaceDescriptors.js.map","import { __extends } from \"tslib\";\r\nimport { isValidProbablitiy } from '../utils';\r\nimport { LabeledBox } from './LabeledBox';\r\nvar PredictedBox = /** @class */ (function (_super) {\r\n __extends(PredictedBox, _super);\r\n function PredictedBox(box, label, score, classScore) {\r\n var _this = _super.call(this, box, label) || this;\r\n _this._score = score;\r\n _this._classScore = classScore;\r\n return _this;\r\n }\r\n PredictedBox.assertIsValidPredictedBox = function (box, callee) {\r\n LabeledBox.assertIsValidLabeledBox(box, callee);\r\n if (!isValidProbablitiy(box.score)\r\n || !isValidProbablitiy(box.classScore)) {\r\n throw new Error(callee + \" - expected properties score (\" + box.score + \") and (\" + box.classScore + \") to be a number between [0, 1]\");\r\n }\r\n };\r\n Object.defineProperty(PredictedBox.prototype, \"score\", {\r\n get: function () { return this._score; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PredictedBox.prototype, \"classScore\", {\r\n get: function () { return this._classScore; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PredictedBox;\r\n}(LabeledBox));\r\nexport { PredictedBox };\r\n//# sourceMappingURL=PredictedBox.js.map","import { FaceDetection } from '../classes/FaceDetection';\r\nexport function isWithFaceDetection(obj) {\r\n return obj['detection'] instanceof FaceDetection;\r\n}\r\nexport function extendWithFaceDetection(sourceObj, detection) {\r\n var extension = { detection: detection };\r\n return Object.assign({}, sourceObj, extension);\r\n}\r\n//# sourceMappingURL=WithFaceDetection.js.map","export function createBrowserEnv() {\r\n var fetch = window['fetch'] || function () {\r\n throw new Error('fetch - missing fetch implementation for browser environment');\r\n };\r\n var readFile = function () {\r\n throw new Error('readFile - filesystem not available for browser environment');\r\n };\r\n return {\r\n Canvas: HTMLCanvasElement,\r\n CanvasRenderingContext2D: CanvasRenderingContext2D,\r\n Image: HTMLImageElement,\r\n ImageData: ImageData,\r\n Video: HTMLVideoElement,\r\n createCanvasElement: function () { return document.createElement('canvas'); },\r\n createImageElement: function () { return document.createElement('img'); },\r\n fetch: fetch,\r\n readFile: readFile\r\n };\r\n}\r\n//# sourceMappingURL=createBrowserEnv.js.map","export function isBrowser() {\r\n return typeof window === 'object'\r\n && typeof document !== 'undefined'\r\n && typeof HTMLImageElement !== 'undefined'\r\n && typeof HTMLCanvasElement !== 'undefined'\r\n && typeof HTMLVideoElement !== 'undefined'\r\n && typeof ImageData !== 'undefined'\r\n && typeof CanvasRenderingContext2D !== 'undefined';\r\n}\r\n//# sourceMappingURL=isBrowser.js.map","import { createBrowserEnv } from './createBrowserEnv';\r\nimport { createFileSystem } from './createFileSystem';\r\nimport { createNodejsEnv } from './createNodejsEnv';\r\nimport { isBrowser } from './isBrowser';\r\nimport { isNodejs } from './isNodejs';\r\nvar environment;\r\nfunction getEnv() {\r\n if (!environment) {\r\n throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()');\r\n }\r\n return environment;\r\n}\r\nfunction setEnv(env) {\r\n environment = env;\r\n}\r\nfunction initialize() {\r\n // check for isBrowser() first to prevent electron renderer process\r\n // to be initialized with wrong environment due to isNodejs() returning true\r\n if (isBrowser()) {\r\n setEnv(createBrowserEnv());\r\n }\r\n if (isNodejs()) {\r\n setEnv(createNodejsEnv());\r\n }\r\n}\r\nfunction monkeyPatch(env) {\r\n if (!environment) {\r\n initialize();\r\n }\r\n if (!environment) {\r\n throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()');\r\n }\r\n var _a = env.Canvas, Canvas = _a === void 0 ? environment.Canvas : _a, _b = env.Image, Image = _b === void 0 ? environment.Image : _b;\r\n environment.Canvas = Canvas;\r\n environment.Image = Image;\r\n environment.createCanvasElement = env.createCanvasElement || (function () { return new Canvas(); });\r\n environment.createImageElement = env.createImageElement || (function () { return new Image(); });\r\n environment.ImageData = env.ImageData || environment.ImageData;\r\n environment.Video = env.Video || environment.Video;\r\n environment.fetch = env.fetch || environment.fetch;\r\n environment.readFile = env.readFile || environment.readFile;\r\n}\r\nexport var env = {\r\n getEnv: getEnv,\r\n setEnv: setEnv,\r\n initialize: initialize,\r\n createBrowserEnv: createBrowserEnv,\r\n createFileSystem: createFileSystem,\r\n createNodejsEnv: createNodejsEnv,\r\n monkeyPatch: monkeyPatch,\r\n isBrowser: isBrowser,\r\n isNodejs: isNodejs\r\n};\r\ninitialize();\r\n//# sourceMappingURL=index.js.map","import { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\r\nimport { resolveInput } from '../dom/resolveInput';\r\nexport var AnchorPosition;\r\n(function (AnchorPosition) {\r\n AnchorPosition[\"TOP_LEFT\"] = \"TOP_LEFT\";\r\n AnchorPosition[\"TOP_RIGHT\"] = \"TOP_RIGHT\";\r\n AnchorPosition[\"BOTTOM_LEFT\"] = \"BOTTOM_LEFT\";\r\n AnchorPosition[\"BOTTOM_RIGHT\"] = \"BOTTOM_RIGHT\";\r\n})(AnchorPosition || (AnchorPosition = {}));\r\nvar DrawTextFieldOptions = /** @class */ (function () {\r\n function DrawTextFieldOptions(options) {\r\n if (options === void 0) { options = {}; }\r\n var anchorPosition = options.anchorPosition, backgroundColor = options.backgroundColor, fontColor = options.fontColor, fontSize = options.fontSize, fontStyle = options.fontStyle, padding = options.padding;\r\n this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT;\r\n this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)';\r\n this.fontColor = fontColor || 'rgba(255, 255, 255, 1)';\r\n this.fontSize = fontSize || 14;\r\n this.fontStyle = fontStyle || 'Georgia';\r\n this.padding = padding || 4;\r\n }\r\n return DrawTextFieldOptions;\r\n}());\r\nexport { DrawTextFieldOptions };\r\nvar DrawTextField = /** @class */ (function () {\r\n function DrawTextField(text, anchor, options) {\r\n if (options === void 0) { options = {}; }\r\n this.text = typeof text === 'string'\r\n ? [text]\r\n : (text instanceof DrawTextField ? text.text : text);\r\n this.anchor = anchor;\r\n this.options = new DrawTextFieldOptions(options);\r\n }\r\n DrawTextField.prototype.measureWidth = function (ctx) {\r\n var padding = this.options.padding;\r\n return this.text.map(function (l) { return ctx.measureText(l).width; }).reduce(function (w0, w1) { return w0 < w1 ? w1 : w0; }, 0) + (2 * padding);\r\n };\r\n DrawTextField.prototype.measureHeight = function () {\r\n var _a = this.options, fontSize = _a.fontSize, padding = _a.padding;\r\n return this.text.length * fontSize + (2 * padding);\r\n };\r\n DrawTextField.prototype.getUpperLeft = function (ctx, canvasDims) {\r\n var anchorPosition = this.options.anchorPosition;\r\n var isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT;\r\n var isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT;\r\n var textFieldWidth = this.measureWidth(ctx);\r\n var textFieldHeight = this.measureHeight();\r\n var x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x);\r\n var y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y;\r\n // adjust anchor if text box exceeds canvas borders\r\n if (canvasDims) {\r\n var width = canvasDims.width, height = canvasDims.height;\r\n var newX = Math.max(Math.min(x, width - textFieldWidth), 0);\r\n var newY = Math.max(Math.min(y, height - textFieldHeight), 0);\r\n return { x: newX, y: newY };\r\n }\r\n return { x: x, y: y };\r\n };\r\n DrawTextField.prototype.draw = function (canvasArg) {\r\n var canvas = resolveInput(canvasArg);\r\n var ctx = getContext2dOrThrow(canvas);\r\n var _a = this.options, backgroundColor = _a.backgroundColor, fontColor = _a.fontColor, fontSize = _a.fontSize, fontStyle = _a.fontStyle, padding = _a.padding;\r\n ctx.font = fontSize + \"px \" + fontStyle;\r\n var maxTextWidth = this.measureWidth(ctx);\r\n var textHeight = this.measureHeight();\r\n ctx.fillStyle = backgroundColor;\r\n var upperLeft = this.getUpperLeft(ctx, canvas);\r\n ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight);\r\n ctx.fillStyle = fontColor;\r\n this.text.forEach(function (textLine, i) {\r\n var x = padding + upperLeft.x;\r\n var y = padding + upperLeft.y + ((i + 1) * fontSize);\r\n ctx.fillText(textLine, x, y);\r\n });\r\n };\r\n return DrawTextField;\r\n}());\r\nexport { DrawTextField };\r\n//# sourceMappingURL=DrawTextField.js.map","import { env } from '../env';\r\nexport function resolveInput(arg) {\r\n if (!env.isNodejs() && typeof arg === 'string') {\r\n return document.getElementById(arg);\r\n }\r\n return arg;\r\n}\r\n//# sourceMappingURL=resolveInput.js.map","import { env } from '../env';\r\nimport { resolveInput } from './resolveInput';\r\nexport function getContext2dOrThrow(canvasArg) {\r\n var _a = env.getEnv(), Canvas = _a.Canvas, CanvasRenderingContext2D = _a.CanvasRenderingContext2D;\r\n if (canvasArg instanceof CanvasRenderingContext2D) {\r\n return canvasArg;\r\n }\r\n var canvas = resolveInput(canvasArg);\r\n if (!(canvas instanceof Canvas)) {\r\n throw new Error('resolveContext2d - expected canvas to be of instance of Canvas');\r\n }\r\n var ctx = canvas.getContext('2d');\r\n if (!ctx) {\r\n throw new Error('resolveContext2d - canvas 2d context is null');\r\n }\r\n return ctx;\r\n}\r\n//# sourceMappingURL=getContext2dOrThrow.js.map","import { Box } from '../classes';\r\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\r\nimport { AnchorPosition, DrawTextField, DrawTextFieldOptions } from './DrawTextField';\r\nvar DrawBoxOptions = /** @class */ (function () {\r\n function DrawBoxOptions(options) {\r\n if (options === void 0) { options = {}; }\r\n var boxColor = options.boxColor, lineWidth = options.lineWidth, label = options.label, drawLabelOptions = options.drawLabelOptions;\r\n this.boxColor = boxColor || 'rgba(0, 0, 255, 1)';\r\n this.lineWidth = lineWidth || 2;\r\n this.label = label;\r\n var defaultDrawLabelOptions = {\r\n anchorPosition: AnchorPosition.BOTTOM_LEFT,\r\n backgroundColor: this.boxColor\r\n };\r\n this.drawLabelOptions = new DrawTextFieldOptions(Object.assign({}, defaultDrawLabelOptions, drawLabelOptions));\r\n }\r\n return DrawBoxOptions;\r\n}());\r\nexport { DrawBoxOptions };\r\nvar DrawBox = /** @class */ (function () {\r\n function DrawBox(box, options) {\r\n if (options === void 0) { options = {}; }\r\n this.box = new Box(box);\r\n this.options = new DrawBoxOptions(options);\r\n }\r\n DrawBox.prototype.draw = function (canvasArg) {\r\n var ctx = getContext2dOrThrow(canvasArg);\r\n var _a = this.options, boxColor = _a.boxColor, lineWidth = _a.lineWidth;\r\n var _b = this.box, x = _b.x, y = _b.y, width = _b.width, height = _b.height;\r\n ctx.strokeStyle = boxColor;\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeRect(x, y, width, height);\r\n var label = this.options.label;\r\n if (label) {\r\n new DrawTextField([label], { x: x - (lineWidth / 2), y: y }, this.options.drawLabelOptions).draw(canvasArg);\r\n }\r\n };\r\n return DrawBox;\r\n}());\r\nexport { DrawBox };\r\n//# sourceMappingURL=DrawBox.js.map","import { Box } from '../classes';\r\nimport { FaceDetection } from '../classes/FaceDetection';\r\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\r\nimport { round } from '../utils';\r\nimport { DrawBox } from './DrawBox';\r\nexport function drawDetections(canvasArg, detections) {\r\n var detectionsArray = Array.isArray(detections) ? detections : [detections];\r\n detectionsArray.forEach(function (det) {\r\n var score = det instanceof FaceDetection\r\n ? det.score\r\n : (isWithFaceDetection(det) ? det.detection.score : undefined);\r\n var box = det instanceof FaceDetection\r\n ? det.box\r\n : (isWithFaceDetection(det) ? det.detection.box : new Box(det));\r\n var label = score ? \"\" + round(score) : undefined;\r\n new DrawBox(box, { label: label }).draw(canvasArg);\r\n });\r\n}\r\n//# sourceMappingURL=drawDetections.js.map","import { env } from '../env';\r\nexport function isMediaLoaded(media) {\r\n var _a = env.getEnv(), Image = _a.Image, Video = _a.Video;\r\n return (media instanceof Image && media.complete)\r\n || (media instanceof Video && media.readyState >= 3);\r\n}\r\n//# sourceMappingURL=isMediaLoaded.js.map","import { env } from '../env';\r\nimport { isMediaLoaded } from './isMediaLoaded';\r\nexport function awaitMediaLoaded(media) {\r\n return new Promise(function (resolve, reject) {\r\n if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) {\r\n return resolve();\r\n }\r\n function onLoad(e) {\r\n if (!e.currentTarget)\r\n return;\r\n e.currentTarget.removeEventListener('load', onLoad);\r\n e.currentTarget.removeEventListener('error', onError);\r\n resolve(e);\r\n }\r\n function onError(e) {\r\n if (!e.currentTarget)\r\n return;\r\n e.currentTarget.removeEventListener('load', onLoad);\r\n e.currentTarget.removeEventListener('error', onError);\r\n reject(e);\r\n }\r\n media.addEventListener('load', onLoad);\r\n media.addEventListener('error', onError);\r\n });\r\n}\r\n//# sourceMappingURL=awaitMediaLoaded.js.map","import { env } from '../env';\r\nexport function bufferToImage(buf) {\r\n return new Promise(function (resolve, reject) {\r\n if (!(buf instanceof Blob)) {\r\n return reject('bufferToImage - expected buf to be of type: Blob');\r\n }\r\n var reader = new FileReader();\r\n reader.onload = function () {\r\n if (typeof reader.result !== 'string') {\r\n return reject('bufferToImage - expected reader.result to be a string, in onload');\r\n }\r\n var img = env.getEnv().createImageElement();\r\n img.onload = function () { return resolve(img); };\r\n img.onerror = reject;\r\n img.src = reader.result;\r\n };\r\n reader.onerror = reject;\r\n reader.readAsDataURL(buf);\r\n });\r\n}\r\n//# sourceMappingURL=bufferToImage.js.map","import { Dimensions } from '../classes/Dimensions';\r\nimport { env } from '../env';\r\nexport function getMediaDimensions(input) {\r\n var _a = env.getEnv(), Image = _a.Image, Video = _a.Video;\r\n if (input instanceof Image) {\r\n return new Dimensions(input.naturalWidth, input.naturalHeight);\r\n }\r\n if (input instanceof Video) {\r\n return new Dimensions(input.videoWidth, input.videoHeight);\r\n }\r\n return new Dimensions(input.width, input.height);\r\n}\r\n//# sourceMappingURL=getMediaDimensions.js.map","import { env } from '../env';\r\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\r\nimport { getMediaDimensions } from './getMediaDimensions';\r\nimport { isMediaLoaded } from './isMediaLoaded';\r\nexport function createCanvas(_a) {\r\n var width = _a.width, height = _a.height;\r\n var createCanvasElement = env.getEnv().createCanvasElement;\r\n var canvas = createCanvasElement();\r\n canvas.width = width;\r\n canvas.height = height;\r\n return canvas;\r\n}\r\nexport function createCanvasFromMedia(media, dims) {\r\n var ImageData = env.getEnv().ImageData;\r\n if (!(media instanceof ImageData) && !isMediaLoaded(media)) {\r\n throw new Error('createCanvasFromMedia - media has not finished loading yet');\r\n }\r\n var _a = dims || getMediaDimensions(media), width = _a.width, height = _a.height;\r\n var canvas = createCanvas({ width: width, height: height });\r\n if (media instanceof ImageData) {\r\n getContext2dOrThrow(canvas).putImageData(media, 0, 0);\r\n }\r\n else {\r\n getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);\r\n }\r\n return canvas;\r\n}\r\n//# sourceMappingURL=createCanvas.js.map","import { __awaiter, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { env } from '../env';\r\nimport { isTensor4D } from '../utils';\r\nexport function imageTensorToCanvas(imgTensor, canvas) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var targetCanvas, _a, height, width, numChannels, imgTensor3D;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n targetCanvas = canvas || env.getEnv().createCanvasElement();\r\n _a = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0), height = _a[0], width = _a[1], numChannels = _a[2];\r\n imgTensor3D = tf.tidy(function () { return imgTensor.as3D(height, width, numChannels).toInt(); });\r\n return [4 /*yield*/, tf.browser.toPixels(imgTensor3D, targetCanvas)];\r\n case 1:\r\n _b.sent();\r\n imgTensor3D.dispose();\r\n return [2 /*return*/, targetCanvas];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=imageTensorToCanvas.js.map","import { env } from '../env';\r\nexport function isMediaElement(input) {\r\n var _a = env.getEnv(), Image = _a.Image, Canvas = _a.Canvas, Video = _a.Video;\r\n return input instanceof Image\r\n || input instanceof Canvas\r\n || input instanceof Video;\r\n}\r\n//# sourceMappingURL=isMediaElement.js.map","import { env } from '../env';\r\nimport { createCanvas, createCanvasFromMedia } from './createCanvas';\r\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\r\nimport { getMediaDimensions } from './getMediaDimensions';\r\nexport function imageToSquare(input, inputSize, centerImage) {\r\n if (centerImage === void 0) { centerImage = false; }\r\n var _a = env.getEnv(), Image = _a.Image, Canvas = _a.Canvas;\r\n if (!(input instanceof Image || input instanceof Canvas)) {\r\n throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement');\r\n }\r\n var dims = getMediaDimensions(input);\r\n var scale = inputSize / Math.max(dims.height, dims.width);\r\n var width = scale * dims.width;\r\n var height = scale * dims.height;\r\n var targetCanvas = createCanvas({ width: inputSize, height: inputSize });\r\n var inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input);\r\n var offset = Math.abs(width - height) / 2;\r\n var dx = centerImage && width < height ? offset : 0;\r\n var dy = centerImage && height < width ? offset : 0;\r\n getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height);\r\n return targetCanvas;\r\n}\r\n//# sourceMappingURL=imageToSquare.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { env } from '../env';\r\nimport { padToSquare } from '../ops/padToSquare';\r\nimport { computeReshapedDimensions, isTensor3D, isTensor4D, range } from '../utils';\r\nimport { createCanvasFromMedia } from './createCanvas';\r\nimport { imageToSquare } from './imageToSquare';\r\nvar NetInput = /** @class */ (function () {\r\n function NetInput(inputs, treatAsBatchInput) {\r\n var _this = this;\r\n if (treatAsBatchInput === void 0) { treatAsBatchInput = false; }\r\n this._imageTensors = [];\r\n this._canvases = [];\r\n this._treatAsBatchInput = false;\r\n this._inputDimensions = [];\r\n if (!Array.isArray(inputs)) {\r\n throw new Error(\"NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have \" + inputs);\r\n }\r\n this._treatAsBatchInput = treatAsBatchInput;\r\n this._batchSize = inputs.length;\r\n inputs.forEach(function (input, idx) {\r\n if (isTensor3D(input)) {\r\n _this._imageTensors[idx] = input;\r\n _this._inputDimensions[idx] = input.shape;\r\n return;\r\n }\r\n if (isTensor4D(input)) {\r\n var batchSize = input.shape[0];\r\n if (batchSize !== 1) {\r\n throw new Error(\"NetInput - tf.Tensor4D with batchSize \" + batchSize + \" passed, but not supported in input array\");\r\n }\r\n _this._imageTensors[idx] = input;\r\n _this._inputDimensions[idx] = input.shape.slice(1);\r\n return;\r\n }\r\n var canvas = input instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input);\r\n _this._canvases[idx] = canvas;\r\n _this._inputDimensions[idx] = [canvas.height, canvas.width, 3];\r\n });\r\n }\r\n Object.defineProperty(NetInput.prototype, \"imageTensors\", {\r\n get: function () {\r\n return this._imageTensors;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NetInput.prototype, \"canvases\", {\r\n get: function () {\r\n return this._canvases;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NetInput.prototype, \"isBatchInput\", {\r\n get: function () {\r\n return this.batchSize > 1 || this._treatAsBatchInput;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NetInput.prototype, \"batchSize\", {\r\n get: function () {\r\n return this._batchSize;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NetInput.prototype, \"inputDimensions\", {\r\n get: function () {\r\n return this._inputDimensions;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NetInput.prototype, \"inputSize\", {\r\n get: function () {\r\n return this._inputSize;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NetInput.prototype, \"reshapedInputDimensions\", {\r\n get: function () {\r\n var _this = this;\r\n return range(this.batchSize, 0, 1).map(function (_, batchIdx) { return _this.getReshapedInputDimensions(batchIdx); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n NetInput.prototype.getInput = function (batchIdx) {\r\n return this.canvases[batchIdx] || this.imageTensors[batchIdx];\r\n };\r\n NetInput.prototype.getInputDimensions = function (batchIdx) {\r\n return this._inputDimensions[batchIdx];\r\n };\r\n NetInput.prototype.getInputHeight = function (batchIdx) {\r\n return this._inputDimensions[batchIdx][0];\r\n };\r\n NetInput.prototype.getInputWidth = function (batchIdx) {\r\n return this._inputDimensions[batchIdx][1];\r\n };\r\n NetInput.prototype.getReshapedInputDimensions = function (batchIdx) {\r\n if (typeof this.inputSize !== 'number') {\r\n throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet');\r\n }\r\n var width = this.getInputWidth(batchIdx);\r\n var height = this.getInputHeight(batchIdx);\r\n return computeReshapedDimensions({ width: width, height: height }, this.inputSize);\r\n };\r\n /**\r\n * Create a batch tensor from all input canvases and tensors\r\n * with size [batchSize, inputSize, inputSize, 3].\r\n *\r\n * @param inputSize Height and width of the tensor.\r\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\r\n * both sides of the minor dimension oof the image.\r\n * @returns The batch tensor.\r\n */\r\n NetInput.prototype.toBatchTensor = function (inputSize, isCenterInputs) {\r\n var _this = this;\r\n if (isCenterInputs === void 0) { isCenterInputs = true; }\r\n this._inputSize = inputSize;\r\n return tf.tidy(function () {\r\n var inputTensors = range(_this.batchSize, 0, 1).map(function (batchIdx) {\r\n var input = _this.getInput(batchIdx);\r\n if (input instanceof tf.Tensor) {\r\n var imgTensor = isTensor4D(input) ? input : input.expandDims();\r\n imgTensor = padToSquare(imgTensor, isCenterInputs);\r\n if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) {\r\n imgTensor = tf.image.resizeBilinear(imgTensor, [inputSize, inputSize]);\r\n }\r\n return imgTensor.as3D(inputSize, inputSize, 3);\r\n }\r\n if (input instanceof env.getEnv().Canvas) {\r\n return tf.browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs));\r\n }\r\n throw new Error(\"toBatchTensor - at batchIdx \" + batchIdx + \", expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have \" + input);\r\n });\r\n var batchTensor = tf.stack(inputTensors.map(function (t) { return t.toFloat(); })).as4D(_this.batchSize, inputSize, inputSize, 3);\r\n return batchTensor;\r\n });\r\n };\r\n return NetInput;\r\n}());\r\nexport { NetInput };\r\n//# sourceMappingURL=NetInput.js.map","import { __awaiter, __generator } from \"tslib\";\r\nimport { isTensor3D, isTensor4D } from '../utils';\r\nimport { awaitMediaLoaded } from './awaitMediaLoaded';\r\nimport { isMediaElement } from './isMediaElement';\r\nimport { NetInput } from './NetInput';\r\nimport { resolveInput } from './resolveInput';\r\n/**\r\n * Validates the input to make sure, they are valid net inputs and awaits all media elements\r\n * to be finished loading.\r\n *\r\n * @param input The input, which can be a media element or an array of different media elements.\r\n * @returns A NetInput instance, which can be passed into one of the neural networks.\r\n */\r\nexport function toNetInput(inputs) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var inputArgArray, getIdxHint, inputArray;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (inputs instanceof NetInput) {\r\n return [2 /*return*/, inputs];\r\n }\r\n inputArgArray = Array.isArray(inputs)\r\n ? inputs\r\n : [inputs];\r\n if (!inputArgArray.length) {\r\n throw new Error('toNetInput - empty array passed as input');\r\n }\r\n getIdxHint = function (idx) { return Array.isArray(inputs) ? \" at input index \" + idx + \":\" : ''; };\r\n inputArray = inputArgArray.map(resolveInput);\r\n inputArray.forEach(function (input, i) {\r\n if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) {\r\n if (typeof inputArgArray[i] === 'string') {\r\n throw new Error(\"toNetInput -\" + getIdxHint(i) + \" string passed, but could not resolve HTMLElement for element id \" + inputArgArray[i]);\r\n }\r\n throw new Error(\"toNetInput -\" + getIdxHint(i) + \" expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id\");\r\n }\r\n if (isTensor4D(input)) {\r\n // if tf.Tensor4D is passed in the input array, the batch size has to be 1\r\n var batchSize = input.shape[0];\r\n if (batchSize !== 1) {\r\n throw new Error(\"toNetInput -\" + getIdxHint(i) + \" tf.Tensor4D with batchSize \" + batchSize + \" passed, but not supported in input array\");\r\n }\r\n }\r\n });\r\n // wait for all media elements being loaded\r\n return [4 /*yield*/, Promise.all(inputArray.map(function (input) { return isMediaElement(input) && awaitMediaLoaded(input); }))];\r\n case 1:\r\n // wait for all media elements being loaded\r\n _a.sent();\r\n return [2 /*return*/, new NetInput(inputArray, Array.isArray(inputs))];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=toNetInput.js.map","import { __awaiter, __generator } from \"tslib\";\r\nimport { FaceDetection } from '../classes/FaceDetection';\r\nimport { env } from '../env';\r\nimport { createCanvas } from './createCanvas';\r\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\r\nimport { imageTensorToCanvas } from './imageTensorToCanvas';\r\nimport { toNetInput } from './toNetInput';\r\n/**\r\n * Extracts the image regions containing the detected faces.\r\n *\r\n * @param input The image that face detection has been performed on.\r\n * @param detections The face detection results or face bounding boxes for that image.\r\n * @returns The Canvases of the corresponding image region for each detected face.\r\n */\r\nexport function extractFaces(input, detections) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var Canvas, canvas, netInput, tensorOrCanvas, _a, ctx, boxes;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n Canvas = env.getEnv().Canvas;\r\n canvas = input;\r\n if (!!(input instanceof Canvas)) return [3 /*break*/, 5];\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1:\r\n netInput = _b.sent();\r\n if (netInput.batchSize > 1) {\r\n throw new Error('extractFaces - batchSize > 1 not supported');\r\n }\r\n tensorOrCanvas = netInput.getInput(0);\r\n if (!(tensorOrCanvas instanceof Canvas)) return [3 /*break*/, 2];\r\n _a = tensorOrCanvas;\r\n return [3 /*break*/, 4];\r\n case 2: return [4 /*yield*/, imageTensorToCanvas(tensorOrCanvas)];\r\n case 3:\r\n _a = _b.sent();\r\n _b.label = 4;\r\n case 4:\r\n canvas = _a;\r\n _b.label = 5;\r\n case 5:\r\n ctx = getContext2dOrThrow(canvas);\r\n boxes = detections.map(function (det) { return det instanceof FaceDetection\r\n ? det.forSize(canvas.width, canvas.height).box.floor()\r\n : det; })\r\n .map(function (box) { return box.clipAtImageBorders(canvas.width, canvas.height); });\r\n return [2 /*return*/, boxes.map(function (_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n var faceImg = createCanvas({ width: width, height: height });\r\n getContext2dOrThrow(faceImg)\r\n .putImageData(ctx.getImageData(x, y, width, height), 0, 0);\r\n return faceImg;\r\n })];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=extractFaces.js.map","import { __awaiter, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { FaceDetection } from '../classes/FaceDetection';\r\nimport { isTensor3D, isTensor4D } from '../utils';\r\n/**\r\n * Extracts the tensors of the image regions containing the detected faces.\r\n * Useful if you want to compute the face descriptors for the face images.\r\n * Using this method is faster then extracting a canvas for each face and\r\n * converting them to tensors individually.\r\n *\r\n * @param imageTensor The image tensor that face detection has been performed on.\r\n * @param detections The face detection results or face bounding boxes for that image.\r\n * @returns Tensors of the corresponding image region for each detected face.\r\n */\r\nexport function extractFaceTensors(imageTensor, detections) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) {\r\n throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D');\r\n }\r\n if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) {\r\n throw new Error('extractFaceTensors - batchSize > 1 not supported');\r\n }\r\n return [2 /*return*/, tf.tidy(function () {\r\n var _a = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0), imgHeight = _a[0], imgWidth = _a[1], numChannels = _a[2];\r\n var boxes = detections.map(function (det) { return det instanceof FaceDetection\r\n ? det.forSize(imgWidth, imgHeight).box\r\n : det; })\r\n .map(function (box) { return box.clipAtImageBorders(imgWidth, imgHeight); });\r\n var faceTensors = boxes.map(function (_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n return tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]);\r\n });\r\n return faceTensors;\r\n })];\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=extractFaceTensors.js.map","import { __awaiter, __generator } from \"tslib\";\r\nimport { env } from '../env';\r\nexport function fetchOrThrow(url, init) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var fetch, res;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n fetch = env.getEnv().fetch;\r\n return [4 /*yield*/, fetch(url, init)];\r\n case 1:\r\n res = _a.sent();\r\n if (!(res.status < 400)) {\r\n throw new Error(\"failed to fetch: (\" + res.status + \") \" + res.statusText + \", from url: \" + res.url);\r\n }\r\n return [2 /*return*/, res];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=fetchOrThrow.js.map","import { __awaiter, __generator } from \"tslib\";\r\nimport { fetchOrThrow } from './fetchOrThrow';\r\nexport function fetchJson(uri) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, fetchOrThrow(uri)];\r\n case 1: return [2 /*return*/, (_a.sent()).json()];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=fetchJson.js.map","export function getModelUris(uri, defaultModelName) {\r\n var defaultManifestFilename = defaultModelName + \"-weights_manifest.json\";\r\n if (!uri) {\r\n return {\r\n modelBaseUri: '',\r\n manifestUri: defaultManifestFilename\r\n };\r\n }\r\n if (uri === '/') {\r\n return {\r\n modelBaseUri: '/',\r\n manifestUri: \"/\" + defaultManifestFilename\r\n };\r\n }\r\n var protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : '';\r\n uri = uri.replace(protocol, '');\r\n var parts = uri.split('/').filter(function (s) { return s; });\r\n var manifestFile = uri.endsWith('.json')\r\n ? parts[parts.length - 1]\r\n : defaultManifestFilename;\r\n var modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/');\r\n modelBaseUri = uri.startsWith('/') ? \"/\" + modelBaseUri : modelBaseUri;\r\n return {\r\n modelBaseUri: modelBaseUri,\r\n manifestUri: modelBaseUri === '/' ? \"/\" + manifestFile : modelBaseUri + \"/\" + manifestFile\r\n };\r\n}\r\n//# sourceMappingURL=getModelUris.js.map","import { __awaiter, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { getModelUris } from '../common/getModelUris';\r\nimport { fetchJson } from './fetchJson';\r\nexport function loadWeightMap(uri, defaultModelName) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, manifestUri, modelBaseUri, manifest;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = getModelUris(uri, defaultModelName), manifestUri = _a.manifestUri, modelBaseUri = _a.modelBaseUri;\r\n return [4 /*yield*/, fetchJson(manifestUri)];\r\n case 1:\r\n manifest = _b.sent();\r\n return [2 /*return*/, tf.io.loadWeights(manifest, modelBaseUri)];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=loadWeightMap.js.map","import { getMediaDimensions } from './getMediaDimensions';\r\nexport function matchDimensions(input, reference, useMediaDimensions) {\r\n if (useMediaDimensions === void 0) { useMediaDimensions = false; }\r\n var _a = useMediaDimensions\r\n ? getMediaDimensions(reference)\r\n : reference, width = _a.width, height = _a.height;\r\n input.width = width;\r\n input.height = height;\r\n return { width: width, height: height };\r\n}\r\n//# sourceMappingURL=matchDimensions.js.map","import { __awaiter, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { getModelUris } from './common/getModelUris';\r\nimport { loadWeightMap } from './dom';\r\nimport { env } from './env';\r\nvar NeuralNetwork = /** @class */ (function () {\r\n function NeuralNetwork(_name) {\r\n this._name = _name;\r\n this._params = undefined;\r\n this._paramMappings = [];\r\n }\r\n Object.defineProperty(NeuralNetwork.prototype, \"params\", {\r\n get: function () { return this._params; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NeuralNetwork.prototype, \"paramMappings\", {\r\n get: function () { return this._paramMappings; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NeuralNetwork.prototype, \"isLoaded\", {\r\n get: function () { return !!this.params; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n NeuralNetwork.prototype.getParamFromPath = function (paramPath) {\r\n var _a = this.traversePropertyPath(paramPath), obj = _a.obj, objProp = _a.objProp;\r\n return obj[objProp];\r\n };\r\n NeuralNetwork.prototype.reassignParamFromPath = function (paramPath, tensor) {\r\n var _a = this.traversePropertyPath(paramPath), obj = _a.obj, objProp = _a.objProp;\r\n obj[objProp].dispose();\r\n obj[objProp] = tensor;\r\n };\r\n NeuralNetwork.prototype.getParamList = function () {\r\n var _this = this;\r\n return this._paramMappings.map(function (_a) {\r\n var paramPath = _a.paramPath;\r\n return ({\r\n path: paramPath,\r\n tensor: _this.getParamFromPath(paramPath)\r\n });\r\n });\r\n };\r\n NeuralNetwork.prototype.getTrainableParams = function () {\r\n return this.getParamList().filter(function (param) { return param.tensor instanceof tf.Variable; });\r\n };\r\n NeuralNetwork.prototype.getFrozenParams = function () {\r\n return this.getParamList().filter(function (param) { return !(param.tensor instanceof tf.Variable); });\r\n };\r\n NeuralNetwork.prototype.variable = function () {\r\n var _this = this;\r\n this.getFrozenParams().forEach(function (_a) {\r\n var path = _a.path, tensor = _a.tensor;\r\n _this.reassignParamFromPath(path, tensor.variable());\r\n });\r\n };\r\n NeuralNetwork.prototype.freeze = function () {\r\n var _this = this;\r\n this.getTrainableParams().forEach(function (_a) {\r\n var path = _a.path, variable = _a.tensor;\r\n var tensor = tf.tensor(variable.dataSync());\r\n variable.dispose();\r\n _this.reassignParamFromPath(path, tensor);\r\n });\r\n };\r\n NeuralNetwork.prototype.dispose = function (throwOnRedispose) {\r\n if (throwOnRedispose === void 0) { throwOnRedispose = true; }\r\n this.getParamList().forEach(function (param) {\r\n if (throwOnRedispose && param.tensor.isDisposed) {\r\n throw new Error(\"param tensor has already been disposed for path \" + param.path);\r\n }\r\n param.tensor.dispose();\r\n });\r\n this._params = undefined;\r\n };\r\n NeuralNetwork.prototype.serializeParams = function () {\r\n return new Float32Array(this.getParamList()\r\n .map(function (_a) {\r\n var tensor = _a.tensor;\r\n return Array.from(tensor.dataSync());\r\n })\r\n .reduce(function (flat, arr) { return flat.concat(arr); }));\r\n };\r\n NeuralNetwork.prototype.load = function (weightsOrUrl) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (weightsOrUrl instanceof Float32Array) {\r\n this.extractWeights(weightsOrUrl);\r\n return [2 /*return*/];\r\n }\r\n return [4 /*yield*/, this.loadFromUri(weightsOrUrl)];\r\n case 1:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n NeuralNetwork.prototype.loadFromUri = function (uri) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var weightMap;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (uri && typeof uri !== 'string') {\r\n throw new Error(this._name + \".loadFromUri - expected model uri\");\r\n }\r\n return [4 /*yield*/, loadWeightMap(uri, this.getDefaultModelName())];\r\n case 1:\r\n weightMap = _a.sent();\r\n this.loadFromWeightMap(weightMap);\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n NeuralNetwork.prototype.loadFromDisk = function (filePath) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var readFile, _a, manifestUri, modelBaseUri, fetchWeightsFromDisk, loadWeights, manifest, _b, _c, weightMap;\r\n return __generator(this, function (_d) {\r\n switch (_d.label) {\r\n case 0:\r\n if (filePath && typeof filePath !== 'string') {\r\n throw new Error(this._name + \".loadFromDisk - expected model file path\");\r\n }\r\n readFile = env.getEnv().readFile;\r\n _a = getModelUris(filePath, this.getDefaultModelName()), manifestUri = _a.manifestUri, modelBaseUri = _a.modelBaseUri;\r\n fetchWeightsFromDisk = function (filePaths) { return Promise.all(filePaths.map(function (filePath) { return readFile(filePath).then(function (buf) { return buf.buffer; }); })); };\r\n loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk);\r\n _c = (_b = JSON).parse;\r\n return [4 /*yield*/, readFile(manifestUri)];\r\n case 1:\r\n manifest = _c.apply(_b, [(_d.sent()).toString()]);\r\n return [4 /*yield*/, loadWeights(manifest, modelBaseUri)];\r\n case 2:\r\n weightMap = _d.sent();\r\n this.loadFromWeightMap(weightMap);\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n NeuralNetwork.prototype.loadFromWeightMap = function (weightMap) {\r\n var _a = this.extractParamsFromWeigthMap(weightMap), paramMappings = _a.paramMappings, params = _a.params;\r\n this._paramMappings = paramMappings;\r\n this._params = params;\r\n };\r\n NeuralNetwork.prototype.extractWeights = function (weights) {\r\n var _a = this.extractParams(weights), paramMappings = _a.paramMappings, params = _a.params;\r\n this._paramMappings = paramMappings;\r\n this._params = params;\r\n };\r\n NeuralNetwork.prototype.traversePropertyPath = function (paramPath) {\r\n if (!this.params) {\r\n throw new Error(\"traversePropertyPath - model has no loaded params\");\r\n }\r\n var result = paramPath.split('/').reduce(function (res, objProp) {\r\n if (!res.nextObj.hasOwnProperty(objProp)) {\r\n throw new Error(\"traversePropertyPath - object does not have property \" + objProp + \", for path \" + paramPath);\r\n }\r\n return { obj: res.nextObj, objProp: objProp, nextObj: res.nextObj[objProp] };\r\n }, { nextObj: this.params });\r\n var obj = result.obj, objProp = result.objProp;\r\n if (!obj || !objProp || !(obj[objProp] instanceof tf.Tensor)) {\r\n throw new Error(\"traversePropertyPath - parameter is not a tensor, for path \" + paramPath);\r\n }\r\n return { obj: obj, objProp: objProp };\r\n };\r\n return NeuralNetwork;\r\n}());\r\nexport { NeuralNetwork };\r\n//# sourceMappingURL=NeuralNetwork.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function depthwiseSeparableConv(x, params, stride) {\r\n return tf.tidy(function () {\r\n var out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same');\r\n out = tf.add(out, params.bias);\r\n return out;\r\n });\r\n}\r\n//# sourceMappingURL=depthwiseSeparableConv.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\r\nexport function denseBlock3(x, denseBlockParams, isFirstLayer) {\r\n if (isFirstLayer === void 0) { isFirstLayer = false; }\r\n return tf.tidy(function () {\r\n var out1 = tf.relu(isFirstLayer\r\n ? tf.add(tf.conv2d(x, denseBlockParams.conv0.filters, [2, 2], 'same'), denseBlockParams.conv0.bias)\r\n : depthwiseSeparableConv(x, denseBlockParams.conv0, [2, 2]));\r\n var out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\r\n var in3 = tf.relu(tf.add(out1, out2));\r\n var out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\r\n return tf.relu(tf.add(out1, tf.add(out2, out3)));\r\n });\r\n}\r\nexport function denseBlock4(x, denseBlockParams, isFirstLayer, isScaleDown) {\r\n if (isFirstLayer === void 0) { isFirstLayer = false; }\r\n if (isScaleDown === void 0) { isScaleDown = true; }\r\n return tf.tidy(function () {\r\n var out1 = tf.relu(isFirstLayer\r\n ? tf.add(tf.conv2d(x, denseBlockParams.conv0.filters, isScaleDown ? [2, 2] : [1, 1], 'same'), denseBlockParams.conv0.bias)\r\n : depthwiseSeparableConv(x, denseBlockParams.conv0, isScaleDown ? [2, 2] : [1, 1]));\r\n var out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]);\r\n var in3 = tf.relu(tf.add(out1, out2));\r\n var out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1]);\r\n var in4 = tf.relu(tf.add(out1, tf.add(out2, out3)));\r\n var out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1]);\r\n return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4))));\r\n });\r\n}\r\n//# sourceMappingURL=denseBlock.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function convLayer(x, params, padding, withRelu) {\r\n if (padding === void 0) { padding = 'same'; }\r\n if (withRelu === void 0) { withRelu = false; }\r\n return tf.tidy(function () {\r\n var out = tf.add(tf.conv2d(x, params.filters, [1, 1], padding), params.bias);\r\n return withRelu ? tf.relu(out) : out;\r\n });\r\n}\r\n//# sourceMappingURL=convLayer.js.map","export function disposeUnusedWeightTensors(weightMap, paramMappings) {\r\n Object.keys(weightMap).forEach(function (path) {\r\n if (!paramMappings.some(function (pm) { return pm.originalPath === path; })) {\r\n weightMap[path].dispose();\r\n }\r\n });\r\n}\r\n//# sourceMappingURL=disposeUnusedWeightTensors.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function extractConvParamsFactory(extractWeights, paramMappings) {\r\n return function (channelsIn, channelsOut, filterSize, mappedPrefix) {\r\n var filters = tf.tensor4d(extractWeights(channelsIn * channelsOut * filterSize * filterSize), [filterSize, filterSize, channelsIn, channelsOut]);\r\n var bias = tf.tensor1d(extractWeights(channelsOut));\r\n paramMappings.push({ paramPath: mappedPrefix + \"/filters\" }, { paramPath: mappedPrefix + \"/bias\" });\r\n return { filters: filters, bias: bias };\r\n };\r\n}\r\n//# sourceMappingURL=extractConvParamsFactory.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function extractFCParamsFactory(extractWeights, paramMappings) {\r\n return function (channelsIn, channelsOut, mappedPrefix) {\r\n var fc_weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);\r\n var fc_bias = tf.tensor1d(extractWeights(channelsOut));\r\n paramMappings.push({ paramPath: mappedPrefix + \"/weights\" }, { paramPath: mappedPrefix + \"/bias\" });\r\n return {\r\n weights: fc_weights,\r\n bias: fc_bias\r\n };\r\n };\r\n}\r\n//# sourceMappingURL=extractFCParamsFactory.js.map","var SeparableConvParams = /** @class */ (function () {\r\n function SeparableConvParams(depthwise_filter, pointwise_filter, bias) {\r\n this.depthwise_filter = depthwise_filter;\r\n this.pointwise_filter = pointwise_filter;\r\n this.bias = bias;\r\n }\r\n return SeparableConvParams;\r\n}());\r\nexport { SeparableConvParams };\r\n//# sourceMappingURL=types.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { SeparableConvParams } from './types';\r\nexport function extractSeparableConvParamsFactory(extractWeights, paramMappings) {\r\n return function (channelsIn, channelsOut, mappedPrefix) {\r\n var depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);\r\n var pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);\r\n var bias = tf.tensor1d(extractWeights(channelsOut));\r\n paramMappings.push({ paramPath: mappedPrefix + \"/depthwise_filter\" }, { paramPath: mappedPrefix + \"/pointwise_filter\" }, { paramPath: mappedPrefix + \"/bias\" });\r\n return new SeparableConvParams(depthwise_filter, pointwise_filter, bias);\r\n };\r\n}\r\nexport function loadSeparableConvParamsFactory(extractWeightEntry) {\r\n return function (prefix) {\r\n var depthwise_filter = extractWeightEntry(prefix + \"/depthwise_filter\", 4);\r\n var pointwise_filter = extractWeightEntry(prefix + \"/pointwise_filter\", 4);\r\n var bias = extractWeightEntry(prefix + \"/bias\", 1);\r\n return new SeparableConvParams(depthwise_filter, pointwise_filter, bias);\r\n };\r\n}\r\n//# sourceMappingURL=extractSeparableConvParamsFactory.js.map","import { isTensor } from '../utils';\r\nexport function extractWeightEntryFactory(weightMap, paramMappings) {\r\n return function (originalPath, paramRank, mappedPath) {\r\n var tensor = weightMap[originalPath];\r\n if (!isTensor(tensor, paramRank)) {\r\n throw new Error(\"expected weightMap[\" + originalPath + \"] to be a Tensor\" + paramRank + \"D, instead have \" + tensor);\r\n }\r\n paramMappings.push({ originalPath: originalPath, paramPath: mappedPath || originalPath });\r\n return tensor;\r\n };\r\n}\r\n//# sourceMappingURL=extractWeightEntryFactory.js.map","export function extractWeightsFactory(weights) {\r\n var remainingWeights = weights;\r\n function extractWeights(numWeights) {\r\n var ret = remainingWeights.slice(0, numWeights);\r\n remainingWeights = remainingWeights.slice(numWeights);\r\n return ret;\r\n }\r\n function getRemainingWeights() {\r\n return remainingWeights;\r\n }\r\n return {\r\n extractWeights: extractWeights,\r\n getRemainingWeights: getRemainingWeights\r\n };\r\n}\r\n//# sourceMappingURL=extractWeightsFactory.js.map","import { extractConvParamsFactory, extractSeparableConvParamsFactory, } from '../common';\r\nexport function extractorsFactory(extractWeights, paramMappings) {\r\n var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\r\n var extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\r\n function extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) {\r\n if (isFirstLayer === void 0) { isFirstLayer = false; }\r\n var conv0 = isFirstLayer\r\n ? extractConvParams(channelsIn, channelsOut, 3, mappedPrefix + \"/conv0\")\r\n : extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix + \"/conv0\");\r\n var conv1 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + \"/conv1\");\r\n var conv2 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + \"/conv2\");\r\n return { conv0: conv0, conv1: conv1, conv2: conv2 };\r\n }\r\n function extractDenseBlock4Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) {\r\n if (isFirstLayer === void 0) { isFirstLayer = false; }\r\n var _a = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer), conv0 = _a.conv0, conv1 = _a.conv1, conv2 = _a.conv2;\r\n var conv3 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + \"/conv3\");\r\n return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 };\r\n }\r\n return {\r\n extractDenseBlock3Params: extractDenseBlock3Params,\r\n extractDenseBlock4Params: extractDenseBlock4Params\r\n };\r\n}\r\n//# sourceMappingURL=extractorsFactory.js.map","import { extractWeightsFactory } from '../common';\r\nimport { extractorsFactory } from './extractorsFactory';\r\nexport function extractParams(weights) {\r\n var paramMappings = [];\r\n var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;\r\n var extractDenseBlock4Params = extractorsFactory(extractWeights, paramMappings).extractDenseBlock4Params;\r\n var dense0 = extractDenseBlock4Params(3, 32, 'dense0', true);\r\n var dense1 = extractDenseBlock4Params(32, 64, 'dense1');\r\n var dense2 = extractDenseBlock4Params(64, 128, 'dense2');\r\n var dense3 = extractDenseBlock4Params(128, 256, 'dense3');\r\n if (getRemainingWeights().length !== 0) {\r\n throw new Error(\"weights remaing after extract: \" + getRemainingWeights().length);\r\n }\r\n return {\r\n paramMappings: paramMappings,\r\n params: { dense0: dense0, dense1: dense1, dense2: dense2, dense3: dense3 }\r\n };\r\n}\r\n//# sourceMappingURL=extractParams.js.map","export function loadConvParamsFactory(extractWeightEntry) {\r\n return function (prefix) {\r\n var filters = extractWeightEntry(prefix + \"/filters\", 4);\r\n var bias = extractWeightEntry(prefix + \"/bias\", 1);\r\n return { filters: filters, bias: bias };\r\n };\r\n}\r\n//# sourceMappingURL=loadConvParamsFactory.js.map","import { extractWeightEntryFactory, loadSeparableConvParamsFactory } from '../common';\r\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\r\nexport function loadParamsFactory(weightMap, paramMappings) {\r\n var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\r\n var extractConvParams = loadConvParamsFactory(extractWeightEntry);\r\n var extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\r\n function extractDenseBlock3Params(prefix, isFirstLayer) {\r\n if (isFirstLayer === void 0) { isFirstLayer = false; }\r\n var conv0 = isFirstLayer\r\n ? extractConvParams(prefix + \"/conv0\")\r\n : extractSeparableConvParams(prefix + \"/conv0\");\r\n var conv1 = extractSeparableConvParams(prefix + \"/conv1\");\r\n var conv2 = extractSeparableConvParams(prefix + \"/conv2\");\r\n return { conv0: conv0, conv1: conv1, conv2: conv2 };\r\n }\r\n function extractDenseBlock4Params(prefix, isFirstLayer) {\r\n if (isFirstLayer === void 0) { isFirstLayer = false; }\r\n var conv0 = isFirstLayer\r\n ? extractConvParams(prefix + \"/conv0\")\r\n : extractSeparableConvParams(prefix + \"/conv0\");\r\n var conv1 = extractSeparableConvParams(prefix + \"/conv1\");\r\n var conv2 = extractSeparableConvParams(prefix + \"/conv2\");\r\n var conv3 = extractSeparableConvParams(prefix + \"/conv3\");\r\n return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 };\r\n }\r\n return {\r\n extractDenseBlock3Params: extractDenseBlock3Params,\r\n extractDenseBlock4Params: extractDenseBlock4Params\r\n };\r\n}\r\n//# sourceMappingURL=loadParamsFactory.js.map","import { disposeUnusedWeightTensors } from '../common';\r\nimport { loadParamsFactory } from './loadParamsFactory';\r\nexport function extractParamsFromWeigthMap(weightMap) {\r\n var paramMappings = [];\r\n var extractDenseBlock4Params = loadParamsFactory(weightMap, paramMappings).extractDenseBlock4Params;\r\n var params = {\r\n dense0: extractDenseBlock4Params('dense0', true),\r\n dense1: extractDenseBlock4Params('dense1'),\r\n dense2: extractDenseBlock4Params('dense2'),\r\n dense3: extractDenseBlock4Params('dense3')\r\n };\r\n disposeUnusedWeightTensors(weightMap, paramMappings);\r\n return { params: params, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParamsFromWeigthMap.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { toNetInput } from '../dom';\r\nimport { NeuralNetwork } from '../NeuralNetwork';\r\nimport { normalize } from '../ops';\r\nimport { denseBlock4 } from './denseBlock';\r\nimport { extractParams } from './extractParams';\r\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\r\nvar FaceFeatureExtractor = /** @class */ (function (_super) {\r\n __extends(FaceFeatureExtractor, _super);\r\n function FaceFeatureExtractor() {\r\n return _super.call(this, 'FaceFeatureExtractor') || this;\r\n }\r\n FaceFeatureExtractor.prototype.forwardInput = function (input) {\r\n var params = this.params;\r\n if (!params) {\r\n throw new Error('FaceFeatureExtractor - load model before inference');\r\n }\r\n return tf.tidy(function () {\r\n var batchTensor = input.toBatchTensor(112, true);\r\n var meanRgb = [122.782, 117.001, 104.298];\r\n var normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255));\r\n var out = denseBlock4(normalized, params.dense0, true);\r\n out = denseBlock4(out, params.dense1);\r\n out = denseBlock4(out, params.dense2);\r\n out = denseBlock4(out, params.dense3);\r\n out = tf.avgPool(out, [7, 7], [2, 2], 'valid');\r\n return out;\r\n });\r\n };\r\n FaceFeatureExtractor.prototype.forward = function (input) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this.forwardInput;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];\r\n }\r\n });\r\n });\r\n };\r\n FaceFeatureExtractor.prototype.getDefaultModelName = function () {\r\n return 'face_feature_extractor_model';\r\n };\r\n FaceFeatureExtractor.prototype.extractParamsFromWeigthMap = function (weightMap) {\r\n return extractParamsFromWeigthMap(weightMap);\r\n };\r\n FaceFeatureExtractor.prototype.extractParams = function (weights) {\r\n return extractParams(weights);\r\n };\r\n return FaceFeatureExtractor;\r\n}(NeuralNetwork));\r\nexport { FaceFeatureExtractor };\r\n//# sourceMappingURL=FaceFeatureExtractor.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function fullyConnectedLayer(x, params) {\r\n return tf.tidy(function () {\r\n return tf.add(tf.matMul(x, params.weights), params.bias);\r\n });\r\n}\r\n//# sourceMappingURL=fullyConnectedLayer.js.map","import { extractFCParamsFactory, extractWeightsFactory } from '../common';\r\nexport function extractParams(weights, channelsIn, channelsOut) {\r\n var paramMappings = [];\r\n var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;\r\n var extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\r\n var fc = extractFCParams(channelsIn, channelsOut, 'fc');\r\n if (getRemainingWeights().length !== 0) {\r\n throw new Error(\"weights remaing after extract: \" + getRemainingWeights().length);\r\n }\r\n return {\r\n paramMappings: paramMappings,\r\n params: { fc: fc }\r\n };\r\n}\r\n//# sourceMappingURL=extractParams.js.map","import { disposeUnusedWeightTensors, extractWeightEntryFactory } from '../common';\r\nexport function extractParamsFromWeigthMap(weightMap) {\r\n var paramMappings = [];\r\n var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\r\n function extractFcParams(prefix) {\r\n var weights = extractWeightEntry(prefix + \"/weights\", 2);\r\n var bias = extractWeightEntry(prefix + \"/bias\", 1);\r\n return { weights: weights, bias: bias };\r\n }\r\n var params = {\r\n fc: extractFcParams('fc')\r\n };\r\n disposeUnusedWeightTensors(weightMap, paramMappings);\r\n return { params: params, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParamsFromWeigthMap.js.map","export function seperateWeightMaps(weightMap) {\r\n var featureExtractorMap = {};\r\n var classifierMap = {};\r\n Object.keys(weightMap).forEach(function (key) {\r\n var map = key.startsWith('fc') ? classifierMap : featureExtractorMap;\r\n map[key] = weightMap[key];\r\n });\r\n return { featureExtractorMap: featureExtractorMap, classifierMap: classifierMap };\r\n}\r\n//# sourceMappingURL=util.js.map","import { __extends } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\r\nimport { NetInput } from '../dom';\r\nimport { NeuralNetwork } from '../NeuralNetwork';\r\nimport { extractParams } from './extractParams';\r\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\r\nimport { seperateWeightMaps } from './util';\r\nvar FaceProcessor = /** @class */ (function (_super) {\r\n __extends(FaceProcessor, _super);\r\n function FaceProcessor(_name, faceFeatureExtractor) {\r\n var _this = _super.call(this, _name) || this;\r\n _this._faceFeatureExtractor = faceFeatureExtractor;\r\n return _this;\r\n }\r\n Object.defineProperty(FaceProcessor.prototype, \"faceFeatureExtractor\", {\r\n get: function () {\r\n return this._faceFeatureExtractor;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n FaceProcessor.prototype.runNet = function (input) {\r\n var _this = this;\r\n var params = this.params;\r\n if (!params) {\r\n throw new Error(this._name + \" - load model before inference\");\r\n }\r\n return tf.tidy(function () {\r\n var bottleneckFeatures = input instanceof NetInput\r\n ? _this.faceFeatureExtractor.forwardInput(input)\r\n : input;\r\n return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc);\r\n });\r\n };\r\n FaceProcessor.prototype.dispose = function (throwOnRedispose) {\r\n if (throwOnRedispose === void 0) { throwOnRedispose = true; }\r\n this.faceFeatureExtractor.dispose(throwOnRedispose);\r\n _super.prototype.dispose.call(this, throwOnRedispose);\r\n };\r\n FaceProcessor.prototype.loadClassifierParams = function (weights) {\r\n var _a = this.extractClassifierParams(weights), params = _a.params, paramMappings = _a.paramMappings;\r\n this._params = params;\r\n this._paramMappings = paramMappings;\r\n };\r\n FaceProcessor.prototype.extractClassifierParams = function (weights) {\r\n return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut());\r\n };\r\n FaceProcessor.prototype.extractParamsFromWeigthMap = function (weightMap) {\r\n var _a = seperateWeightMaps(weightMap), featureExtractorMap = _a.featureExtractorMap, classifierMap = _a.classifierMap;\r\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\r\n return extractParamsFromWeigthMap(classifierMap);\r\n };\r\n FaceProcessor.prototype.extractParams = function (weights) {\r\n var cIn = this.getClassifierChannelsIn();\r\n var cOut = this.getClassifierChannelsOut();\r\n var classifierWeightSize = (cOut * cIn) + cOut;\r\n var featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\r\n var classifierWeights = weights.slice(weights.length - classifierWeightSize);\r\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\r\n return this.extractClassifierParams(classifierWeights);\r\n };\r\n return FaceProcessor;\r\n}(NeuralNetwork));\r\nexport { FaceProcessor };\r\n//# sourceMappingURL=FaceProcessor.js.map","export var FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised'];\r\nvar FaceExpressions = /** @class */ (function () {\r\n function FaceExpressions(probabilities) {\r\n var _this = this;\r\n if (probabilities.length !== 7) {\r\n throw new Error(\"FaceExpressions.constructor - expected probabilities.length to be 7, have: \" + probabilities.length);\r\n }\r\n FACE_EXPRESSION_LABELS.forEach(function (expression, idx) {\r\n _this[expression] = probabilities[idx];\r\n });\r\n }\r\n FaceExpressions.prototype.asSortedArray = function () {\r\n var _this = this;\r\n return FACE_EXPRESSION_LABELS\r\n .map(function (expression) { return ({ expression: expression, probability: _this[expression] }); })\r\n .sort(function (e0, e1) { return e1.probability - e0.probability; });\r\n };\r\n return FaceExpressions;\r\n}());\r\nexport { FaceExpressions };\r\n//# sourceMappingURL=FaceExpressions.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { toNetInput } from '../dom';\r\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\r\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\r\nimport { FaceExpressions } from './FaceExpressions';\r\nvar FaceExpressionNet = /** @class */ (function (_super) {\r\n __extends(FaceExpressionNet, _super);\r\n function FaceExpressionNet(faceFeatureExtractor) {\r\n if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new FaceFeatureExtractor(); }\r\n return _super.call(this, 'FaceExpressionNet', faceFeatureExtractor) || this;\r\n }\r\n FaceExpressionNet.prototype.forwardInput = function (input) {\r\n var _this = this;\r\n return tf.tidy(function () { return tf.softmax(_this.runNet(input)); });\r\n };\r\n FaceExpressionNet.prototype.forward = function (input) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this.forwardInput;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];\r\n }\r\n });\r\n });\r\n };\r\n FaceExpressionNet.prototype.predictExpressions = function (input) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var netInput, out, probabilitesByBatch, predictionsByBatch;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, toNetInput(input)];\r\n case 1:\r\n netInput = _a.sent();\r\n return [4 /*yield*/, this.forwardInput(netInput)];\r\n case 2:\r\n out = _a.sent();\r\n return [4 /*yield*/, Promise.all(tf.unstack(out).map(function (t) { return __awaiter(_this, void 0, void 0, function () {\r\n var data;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, t.data()];\r\n case 1:\r\n data = _a.sent();\r\n t.dispose();\r\n return [2 /*return*/, data];\r\n }\r\n });\r\n }); }))];\r\n case 3:\r\n probabilitesByBatch = _a.sent();\r\n out.dispose();\r\n predictionsByBatch = probabilitesByBatch\r\n .map(function (probabilites) { return new FaceExpressions(probabilites); });\r\n return [2 /*return*/, netInput.isBatchInput\r\n ? predictionsByBatch\r\n : predictionsByBatch[0]];\r\n }\r\n });\r\n });\r\n };\r\n FaceExpressionNet.prototype.getDefaultModelName = function () {\r\n return 'face_expression_model';\r\n };\r\n FaceExpressionNet.prototype.getClassifierChannelsIn = function () {\r\n return 256;\r\n };\r\n FaceExpressionNet.prototype.getClassifierChannelsOut = function () {\r\n return 7;\r\n };\r\n return FaceExpressionNet;\r\n}(FaceProcessor));\r\nexport { FaceExpressionNet };\r\n//# sourceMappingURL=FaceExpressionNet.js.map","import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\r\nexport function isWithFaceExpressions(obj) {\r\n return obj['expressions'] instanceof FaceExpressions;\r\n}\r\nexport function extendWithFaceExpressions(sourceObj, expressions) {\r\n var extension = { expressions: expressions };\r\n return Object.assign({}, sourceObj, extension);\r\n}\r\n//# sourceMappingURL=WithFaceExpressions.js.map","import { Point } from '../classes';\r\nimport { FaceExpressions } from '../faceExpressionNet';\r\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\r\nimport { isWithFaceExpressions } from '../factories/WithFaceExpressions';\r\nimport { round } from '../utils';\r\nimport { DrawTextField } from './DrawTextField';\r\nexport function drawFaceExpressions(canvasArg, faceExpressions, minConfidence, textFieldAnchor) {\r\n if (minConfidence === void 0) { minConfidence = 0.1; }\r\n var faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions];\r\n faceExpressionsArray.forEach(function (e) {\r\n var expr = e instanceof FaceExpressions\r\n ? e\r\n : (isWithFaceExpressions(e) ? e.expressions : undefined);\r\n if (!expr) {\r\n throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof');\r\n }\r\n var sorted = expr.asSortedArray();\r\n var resultsToDisplay = sorted.filter(function (expr) { return expr.probability > minConfidence; });\r\n var anchor = isWithFaceDetection(e)\r\n ? e.detection.box.bottomLeft\r\n : (textFieldAnchor || new Point(0, 0));\r\n var drawTextField = new DrawTextField(resultsToDisplay.map(function (expr) { return expr.expression + \" (\" + round(expr.probability) + \")\"; }), anchor);\r\n drawTextField.draw(canvasArg);\r\n });\r\n}\r\n//# sourceMappingURL=drawFaceExpressions.js.map","import { FaceDetection } from '../classes/FaceDetection';\r\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\r\nimport { isWithFaceDetection } from './WithFaceDetection';\r\nexport function isWithFaceLandmarks(obj) {\r\n return isWithFaceDetection(obj)\r\n && obj['landmarks'] instanceof FaceLandmarks\r\n && obj['unshiftedLandmarks'] instanceof FaceLandmarks\r\n && obj['alignedRect'] instanceof FaceDetection;\r\n}\r\nexport function extendWithFaceLandmarks(sourceObj, unshiftedLandmarks) {\r\n var shift = sourceObj.detection.box;\r\n var landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y);\r\n var rect = landmarks.align();\r\n var imageDims = sourceObj.detection.imageDims;\r\n var alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims);\r\n var extension = {\r\n landmarks: landmarks,\r\n unshiftedLandmarks: unshiftedLandmarks,\r\n alignedRect: alignedRect\r\n };\r\n return Object.assign({}, sourceObj, extension);\r\n}\r\n//# sourceMappingURL=WithFaceLandmarks.js.map","import { FaceLandmarks } from '../classes/FaceLandmarks';\r\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\r\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\r\nimport { isWithFaceLandmarks } from '../factories/WithFaceLandmarks';\r\nimport { drawContour } from './drawContour';\r\nvar DrawFaceLandmarksOptions = /** @class */ (function () {\r\n function DrawFaceLandmarksOptions(options) {\r\n if (options === void 0) { options = {}; }\r\n var _a = options.drawLines, drawLines = _a === void 0 ? true : _a, _b = options.drawPoints, drawPoints = _b === void 0 ? true : _b, lineWidth = options.lineWidth, lineColor = options.lineColor, pointSize = options.pointSize, pointColor = options.pointColor;\r\n this.drawLines = drawLines;\r\n this.drawPoints = drawPoints;\r\n this.lineWidth = lineWidth || 1;\r\n this.pointSize = pointSize || 2;\r\n this.lineColor = lineColor || 'rgba(0, 255, 255, 1)';\r\n this.pointColor = pointColor || 'rgba(255, 0, 255, 1)';\r\n }\r\n return DrawFaceLandmarksOptions;\r\n}());\r\nexport { DrawFaceLandmarksOptions };\r\nvar DrawFaceLandmarks = /** @class */ (function () {\r\n function DrawFaceLandmarks(faceLandmarks, options) {\r\n if (options === void 0) { options = {}; }\r\n this.faceLandmarks = faceLandmarks;\r\n this.options = new DrawFaceLandmarksOptions(options);\r\n }\r\n DrawFaceLandmarks.prototype.draw = function (canvasArg) {\r\n var ctx = getContext2dOrThrow(canvasArg);\r\n var _a = this.options, drawLines = _a.drawLines, drawPoints = _a.drawPoints, lineWidth = _a.lineWidth, lineColor = _a.lineColor, pointSize = _a.pointSize, pointColor = _a.pointColor;\r\n if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {\r\n ctx.strokeStyle = lineColor;\r\n ctx.lineWidth = lineWidth;\r\n drawContour(ctx, this.faceLandmarks.getJawOutline());\r\n drawContour(ctx, this.faceLandmarks.getLeftEyeBrow());\r\n drawContour(ctx, this.faceLandmarks.getRightEyeBrow());\r\n drawContour(ctx, this.faceLandmarks.getNose());\r\n drawContour(ctx, this.faceLandmarks.getLeftEye(), true);\r\n drawContour(ctx, this.faceLandmarks.getRightEye(), true);\r\n drawContour(ctx, this.faceLandmarks.getMouth(), true);\r\n }\r\n if (drawPoints) {\r\n ctx.strokeStyle = pointColor;\r\n ctx.fillStyle = pointColor;\r\n var drawPoint = function (pt) {\r\n ctx.beginPath();\r\n ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI);\r\n ctx.fill();\r\n };\r\n this.faceLandmarks.positions.forEach(drawPoint);\r\n }\r\n };\r\n return DrawFaceLandmarks;\r\n}());\r\nexport { DrawFaceLandmarks };\r\nexport function drawFaceLandmarks(canvasArg, faceLandmarks) {\r\n var faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks];\r\n faceLandmarksArray.forEach(function (f) {\r\n var landmarks = f instanceof FaceLandmarks\r\n ? f\r\n : (isWithFaceLandmarks(f) ? f.landmarks : undefined);\r\n if (!landmarks) {\r\n throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof');\r\n }\r\n new DrawFaceLandmarks(landmarks).draw(canvasArg);\r\n });\r\n}\r\n//# sourceMappingURL=DrawFaceLandmarks.js.map","import { extractConvParamsFactory, extractSeparableConvParamsFactory, extractWeightsFactory } from '../common';\r\nimport { range } from '../utils';\r\nfunction extractorsFactory(extractWeights, paramMappings) {\r\n var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\r\n var extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\r\n function extractReductionBlockParams(channelsIn, channelsOut, mappedPrefix) {\r\n var separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix + \"/separable_conv0\");\r\n var separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + \"/separable_conv1\");\r\n var expansion_conv = extractConvParams(channelsIn, channelsOut, 1, mappedPrefix + \"/expansion_conv\");\r\n return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, expansion_conv: expansion_conv };\r\n }\r\n function extractMainBlockParams(channels, mappedPrefix) {\r\n var separable_conv0 = extractSeparableConvParams(channels, channels, mappedPrefix + \"/separable_conv0\");\r\n var separable_conv1 = extractSeparableConvParams(channels, channels, mappedPrefix + \"/separable_conv1\");\r\n var separable_conv2 = extractSeparableConvParams(channels, channels, mappedPrefix + \"/separable_conv2\");\r\n return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, separable_conv2: separable_conv2 };\r\n }\r\n return {\r\n extractConvParams: extractConvParams,\r\n extractSeparableConvParams: extractSeparableConvParams,\r\n extractReductionBlockParams: extractReductionBlockParams,\r\n extractMainBlockParams: extractMainBlockParams\r\n };\r\n}\r\nexport function extractParams(weights, numMainBlocks) {\r\n var paramMappings = [];\r\n var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;\r\n var _b = extractorsFactory(extractWeights, paramMappings), extractConvParams = _b.extractConvParams, extractSeparableConvParams = _b.extractSeparableConvParams, extractReductionBlockParams = _b.extractReductionBlockParams, extractMainBlockParams = _b.extractMainBlockParams;\r\n var entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in');\r\n var entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0');\r\n var entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1');\r\n var entry_flow = {\r\n conv_in: entry_flow_conv_in,\r\n reduction_block_0: entry_flow_reduction_block_0,\r\n reduction_block_1: entry_flow_reduction_block_1\r\n };\r\n var middle_flow = {};\r\n range(numMainBlocks, 0, 1).forEach(function (idx) {\r\n middle_flow[\"main_block_\" + idx] = extractMainBlockParams(128, \"middle_flow/main_block_\" + idx);\r\n });\r\n var exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block');\r\n var exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv');\r\n var exit_flow = {\r\n reduction_block: exit_flow_reduction_block,\r\n separable_conv: exit_flow_separable_conv\r\n };\r\n if (getRemainingWeights().length !== 0) {\r\n throw new Error(\"weights remaing after extract: \" + getRemainingWeights().length);\r\n }\r\n return {\r\n paramMappings: paramMappings,\r\n params: { entry_flow: entry_flow, middle_flow: middle_flow, exit_flow: exit_flow }\r\n };\r\n}\r\n//# sourceMappingURL=extractParams.js.map","import { disposeUnusedWeightTensors, extractWeightEntryFactory, loadSeparableConvParamsFactory, } from '../common';\r\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\r\nimport { range } from '../utils';\r\nfunction loadParamsFactory(weightMap, paramMappings) {\r\n var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\r\n var extractConvParams = loadConvParamsFactory(extractWeightEntry);\r\n var extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\r\n function extractReductionBlockParams(mappedPrefix) {\r\n var separable_conv0 = extractSeparableConvParams(mappedPrefix + \"/separable_conv0\");\r\n var separable_conv1 = extractSeparableConvParams(mappedPrefix + \"/separable_conv1\");\r\n var expansion_conv = extractConvParams(mappedPrefix + \"/expansion_conv\");\r\n return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, expansion_conv: expansion_conv };\r\n }\r\n function extractMainBlockParams(mappedPrefix) {\r\n var separable_conv0 = extractSeparableConvParams(mappedPrefix + \"/separable_conv0\");\r\n var separable_conv1 = extractSeparableConvParams(mappedPrefix + \"/separable_conv1\");\r\n var separable_conv2 = extractSeparableConvParams(mappedPrefix + \"/separable_conv2\");\r\n return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, separable_conv2: separable_conv2 };\r\n }\r\n return {\r\n extractConvParams: extractConvParams,\r\n extractSeparableConvParams: extractSeparableConvParams,\r\n extractReductionBlockParams: extractReductionBlockParams,\r\n extractMainBlockParams: extractMainBlockParams\r\n };\r\n}\r\nexport function extractParamsFromWeigthMap(weightMap, numMainBlocks) {\r\n var paramMappings = [];\r\n var _a = loadParamsFactory(weightMap, paramMappings), extractConvParams = _a.extractConvParams, extractSeparableConvParams = _a.extractSeparableConvParams, extractReductionBlockParams = _a.extractReductionBlockParams, extractMainBlockParams = _a.extractMainBlockParams;\r\n var entry_flow_conv_in = extractConvParams('entry_flow/conv_in');\r\n var entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0');\r\n var entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1');\r\n var entry_flow = {\r\n conv_in: entry_flow_conv_in,\r\n reduction_block_0: entry_flow_reduction_block_0,\r\n reduction_block_1: entry_flow_reduction_block_1\r\n };\r\n var middle_flow = {};\r\n range(numMainBlocks, 0, 1).forEach(function (idx) {\r\n middle_flow[\"main_block_\" + idx] = extractMainBlockParams(\"middle_flow/main_block_\" + idx);\r\n });\r\n var exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block');\r\n var exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv');\r\n var exit_flow = {\r\n reduction_block: exit_flow_reduction_block,\r\n separable_conv: exit_flow_separable_conv\r\n };\r\n disposeUnusedWeightTensors(weightMap, paramMappings);\r\n return { params: { entry_flow: entry_flow, middle_flow: middle_flow, exit_flow: exit_flow }, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParamsFromWeigthMap.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { depthwiseSeparableConv } from '../common';\r\nimport { toNetInput } from '../dom';\r\nimport { NeuralNetwork } from '../NeuralNetwork';\r\nimport { normalize } from '../ops';\r\nimport { range } from '../utils';\r\nimport { extractParams } from './extractParams';\r\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\r\nfunction conv(x, params, stride) {\r\n return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias);\r\n}\r\nfunction reductionBlock(x, params, isActivateInput) {\r\n if (isActivateInput === void 0) { isActivateInput = true; }\r\n var out = isActivateInput ? tf.relu(x) : x;\r\n out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1]);\r\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\r\n out = tf.maxPool(out, [3, 3], [2, 2], 'same');\r\n out = tf.add(out, conv(x, params.expansion_conv, [2, 2]));\r\n return out;\r\n}\r\nfunction mainBlock(x, params) {\r\n var out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1]);\r\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1]);\r\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1]);\r\n out = tf.add(out, x);\r\n return out;\r\n}\r\nvar TinyXception = /** @class */ (function (_super) {\r\n __extends(TinyXception, _super);\r\n function TinyXception(numMainBlocks) {\r\n var _this = _super.call(this, 'TinyXception') || this;\r\n _this._numMainBlocks = numMainBlocks;\r\n return _this;\r\n }\r\n TinyXception.prototype.forwardInput = function (input) {\r\n var _this = this;\r\n var params = this.params;\r\n if (!params) {\r\n throw new Error('TinyXception - load model before inference');\r\n }\r\n return tf.tidy(function () {\r\n var batchTensor = input.toBatchTensor(112, true);\r\n var meanRgb = [122.782, 117.001, 104.298];\r\n var normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256));\r\n var out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]));\r\n out = reductionBlock(out, params.entry_flow.reduction_block_0, false);\r\n out = reductionBlock(out, params.entry_flow.reduction_block_1);\r\n range(_this._numMainBlocks, 0, 1).forEach(function (idx) {\r\n out = mainBlock(out, params.middle_flow[\"main_block_\" + idx]);\r\n });\r\n out = reductionBlock(out, params.exit_flow.reduction_block);\r\n out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]));\r\n return out;\r\n });\r\n };\r\n TinyXception.prototype.forward = function (input) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this.forwardInput;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];\r\n }\r\n });\r\n });\r\n };\r\n TinyXception.prototype.getDefaultModelName = function () {\r\n return 'tiny_xception_model';\r\n };\r\n TinyXception.prototype.extractParamsFromWeigthMap = function (weightMap) {\r\n return extractParamsFromWeigthMap(weightMap, this._numMainBlocks);\r\n };\r\n TinyXception.prototype.extractParams = function (weights) {\r\n return extractParams(weights, this._numMainBlocks);\r\n };\r\n return TinyXception;\r\n}(NeuralNetwork));\r\nexport { TinyXception };\r\n//# sourceMappingURL=TinyXception.js.map","export var Gender;\r\n(function (Gender) {\r\n Gender[\"FEMALE\"] = \"female\";\r\n Gender[\"MALE\"] = \"male\";\r\n})(Gender || (Gender = {}));\r\n//# sourceMappingURL=types.js.map","import { extractFCParamsFactory, extractWeightsFactory } from '../common';\r\nexport function extractParams(weights) {\r\n var paramMappings = [];\r\n var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;\r\n var extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\r\n var age = extractFCParams(512, 1, 'fc/age');\r\n var gender = extractFCParams(512, 2, 'fc/gender');\r\n if (getRemainingWeights().length !== 0) {\r\n throw new Error(\"weights remaing after extract: \" + getRemainingWeights().length);\r\n }\r\n return {\r\n paramMappings: paramMappings,\r\n params: { fc: { age: age, gender: gender } }\r\n };\r\n}\r\n//# sourceMappingURL=extractParams.js.map","import { disposeUnusedWeightTensors, extractWeightEntryFactory } from '../common';\r\nexport function extractParamsFromWeigthMap(weightMap) {\r\n var paramMappings = [];\r\n var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\r\n function extractFcParams(prefix) {\r\n var weights = extractWeightEntry(prefix + \"/weights\", 2);\r\n var bias = extractWeightEntry(prefix + \"/bias\", 1);\r\n return { weights: weights, bias: bias };\r\n }\r\n var params = {\r\n fc: {\r\n age: extractFcParams('fc/age'),\r\n gender: extractFcParams('fc/gender')\r\n }\r\n };\r\n disposeUnusedWeightTensors(weightMap, paramMappings);\r\n return { params: params, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParamsFromWeigthMap.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\r\nimport { seperateWeightMaps } from '../faceProcessor/util';\r\nimport { TinyXception } from '../xception/TinyXception';\r\nimport { extractParams } from './extractParams';\r\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\r\nimport { Gender } from './types';\r\nimport { NeuralNetwork } from '../NeuralNetwork';\r\nimport { NetInput, toNetInput } from '../dom';\r\nvar AgeGenderNet = /** @class */ (function (_super) {\r\n __extends(AgeGenderNet, _super);\r\n function AgeGenderNet(faceFeatureExtractor) {\r\n if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new TinyXception(2); }\r\n var _this = _super.call(this, 'AgeGenderNet') || this;\r\n _this._faceFeatureExtractor = faceFeatureExtractor;\r\n return _this;\r\n }\r\n Object.defineProperty(AgeGenderNet.prototype, \"faceFeatureExtractor\", {\r\n get: function () {\r\n return this._faceFeatureExtractor;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AgeGenderNet.prototype.runNet = function (input) {\r\n var _this = this;\r\n var params = this.params;\r\n if (!params) {\r\n throw new Error(this._name + \" - load model before inference\");\r\n }\r\n return tf.tidy(function () {\r\n var bottleneckFeatures = input instanceof NetInput\r\n ? _this.faceFeatureExtractor.forwardInput(input)\r\n : input;\r\n var pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1);\r\n var age = fullyConnectedLayer(pooled, params.fc.age).as1D();\r\n var gender = fullyConnectedLayer(pooled, params.fc.gender);\r\n return { age: age, gender: gender };\r\n });\r\n };\r\n AgeGenderNet.prototype.forwardInput = function (input) {\r\n var _this = this;\r\n return tf.tidy(function () {\r\n var _a = _this.runNet(input), age = _a.age, gender = _a.gender;\r\n return { age: age, gender: tf.softmax(gender) };\r\n });\r\n };\r\n AgeGenderNet.prototype.forward = function (input) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this.forwardInput;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];\r\n }\r\n });\r\n });\r\n };\r\n AgeGenderNet.prototype.predictAgeAndGender = function (input) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var netInput, out, ages, genders, ageAndGenderTensors, predictionsByBatch;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, toNetInput(input)];\r\n case 1:\r\n netInput = _a.sent();\r\n return [4 /*yield*/, this.forwardInput(netInput)];\r\n case 2:\r\n out = _a.sent();\r\n ages = tf.unstack(out.age);\r\n genders = tf.unstack(out.gender);\r\n ageAndGenderTensors = ages.map(function (ageTensor, i) { return ({\r\n ageTensor: ageTensor,\r\n genderTensor: genders[i]\r\n }); });\r\n return [4 /*yield*/, Promise.all(ageAndGenderTensors.map(function (_a) {\r\n var ageTensor = _a.ageTensor, genderTensor = _a.genderTensor;\r\n return __awaiter(_this, void 0, void 0, function () {\r\n var age, probMale, isMale, gender, genderProbability;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0: return [4 /*yield*/, ageTensor.data()];\r\n case 1:\r\n age = (_b.sent())[0];\r\n return [4 /*yield*/, genderTensor.data()];\r\n case 2:\r\n probMale = (_b.sent())[0];\r\n isMale = probMale > 0.5;\r\n gender = isMale ? Gender.MALE : Gender.FEMALE;\r\n genderProbability = isMale ? probMale : (1 - probMale);\r\n ageTensor.dispose();\r\n genderTensor.dispose();\r\n return [2 /*return*/, { age: age, gender: gender, genderProbability: genderProbability }];\r\n }\r\n });\r\n });\r\n }))];\r\n case 3:\r\n predictionsByBatch = _a.sent();\r\n out.age.dispose();\r\n out.gender.dispose();\r\n return [2 /*return*/, netInput.isBatchInput\r\n ? predictionsByBatch\r\n : predictionsByBatch[0]];\r\n }\r\n });\r\n });\r\n };\r\n AgeGenderNet.prototype.getDefaultModelName = function () {\r\n return 'age_gender_model';\r\n };\r\n AgeGenderNet.prototype.dispose = function (throwOnRedispose) {\r\n if (throwOnRedispose === void 0) { throwOnRedispose = true; }\r\n this.faceFeatureExtractor.dispose(throwOnRedispose);\r\n _super.prototype.dispose.call(this, throwOnRedispose);\r\n };\r\n AgeGenderNet.prototype.loadClassifierParams = function (weights) {\r\n var _a = this.extractClassifierParams(weights), params = _a.params, paramMappings = _a.paramMappings;\r\n this._params = params;\r\n this._paramMappings = paramMappings;\r\n };\r\n AgeGenderNet.prototype.extractClassifierParams = function (weights) {\r\n return extractParams(weights);\r\n };\r\n AgeGenderNet.prototype.extractParamsFromWeigthMap = function (weightMap) {\r\n var _a = seperateWeightMaps(weightMap), featureExtractorMap = _a.featureExtractorMap, classifierMap = _a.classifierMap;\r\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap);\r\n return extractParamsFromWeigthMap(classifierMap);\r\n };\r\n AgeGenderNet.prototype.extractParams = function (weights) {\r\n var classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2);\r\n var featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize);\r\n var classifierWeights = weights.slice(weights.length - classifierWeightSize);\r\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights);\r\n return this.extractClassifierParams(classifierWeights);\r\n };\r\n return AgeGenderNet;\r\n}(NeuralNetwork));\r\nexport { AgeGenderNet };\r\n//# sourceMappingURL=AgeGenderNet.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { Point } from '../classes';\r\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\r\nimport { toNetInput } from '../dom';\r\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\r\nimport { isEven } from '../utils';\r\nvar FaceLandmark68NetBase = /** @class */ (function (_super) {\r\n __extends(FaceLandmark68NetBase, _super);\r\n function FaceLandmark68NetBase() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n FaceLandmark68NetBase.prototype.postProcess = function (output, inputSize, originalDimensions) {\r\n var inputDimensions = originalDimensions.map(function (_a) {\r\n var width = _a.width, height = _a.height;\r\n var scale = inputSize / Math.max(height, width);\r\n return {\r\n width: width * scale,\r\n height: height * scale\r\n };\r\n });\r\n var batchSize = inputDimensions.length;\r\n return tf.tidy(function () {\r\n var createInterleavedTensor = function (fillX, fillY) {\r\n return tf.stack([\r\n tf.fill([68], fillX),\r\n tf.fill([68], fillY)\r\n ], 1).as2D(1, 136).as1D();\r\n };\r\n var getPadding = function (batchIdx, cond) {\r\n var _a = inputDimensions[batchIdx], width = _a.width, height = _a.height;\r\n return cond(width, height) ? Math.abs(width - height) / 2 : 0;\r\n };\r\n var getPaddingX = function (batchIdx) { return getPadding(batchIdx, function (w, h) { return w < h; }); };\r\n var getPaddingY = function (batchIdx) { return getPadding(batchIdx, function (w, h) { return h < w; }); };\r\n var landmarkTensors = output\r\n .mul(tf.fill([batchSize, 136], inputSize))\r\n .sub(tf.stack(Array.from(Array(batchSize), function (_, batchIdx) {\r\n return createInterleavedTensor(getPaddingX(batchIdx), getPaddingY(batchIdx));\r\n })))\r\n .div(tf.stack(Array.from(Array(batchSize), function (_, batchIdx) {\r\n return createInterleavedTensor(inputDimensions[batchIdx].width, inputDimensions[batchIdx].height);\r\n })));\r\n return landmarkTensors;\r\n });\r\n };\r\n FaceLandmark68NetBase.prototype.forwardInput = function (input) {\r\n var _this = this;\r\n return tf.tidy(function () {\r\n var out = _this.runNet(input);\r\n return _this.postProcess(out, input.inputSize, input.inputDimensions.map(function (_a) {\r\n var height = _a[0], width = _a[1];\r\n return ({ height: height, width: width });\r\n }));\r\n });\r\n };\r\n FaceLandmark68NetBase.prototype.forward = function (input) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this.forwardInput;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];\r\n }\r\n });\r\n });\r\n };\r\n FaceLandmark68NetBase.prototype.detectLandmarks = function (input) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var netInput, landmarkTensors, landmarksForBatch;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, toNetInput(input)];\r\n case 1:\r\n netInput = _a.sent();\r\n landmarkTensors = tf.tidy(function () { return tf.unstack(_this.forwardInput(netInput)); });\r\n return [4 /*yield*/, Promise.all(landmarkTensors.map(function (landmarkTensor, batchIdx) { return __awaiter(_this, void 0, void 0, function () {\r\n var landmarksArray, _a, _b, xCoords, yCoords;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n _b = (_a = Array).from;\r\n return [4 /*yield*/, landmarkTensor.data()];\r\n case 1:\r\n landmarksArray = _b.apply(_a, [_c.sent()]);\r\n xCoords = landmarksArray.filter(function (_, i) { return isEven(i); });\r\n yCoords = landmarksArray.filter(function (_, i) { return !isEven(i); });\r\n return [2 /*return*/, new FaceLandmarks68(Array(68).fill(0).map(function (_, i) { return new Point(xCoords[i], yCoords[i]); }), {\r\n height: netInput.getInputHeight(batchIdx),\r\n width: netInput.getInputWidth(batchIdx),\r\n })];\r\n }\r\n });\r\n }); }))];\r\n case 2:\r\n landmarksForBatch = _a.sent();\r\n landmarkTensors.forEach(function (t) { return t.dispose(); });\r\n return [2 /*return*/, netInput.isBatchInput\r\n ? landmarksForBatch\r\n : landmarksForBatch[0]];\r\n }\r\n });\r\n });\r\n };\r\n FaceLandmark68NetBase.prototype.getClassifierChannelsOut = function () {\r\n return 136;\r\n };\r\n return FaceLandmark68NetBase;\r\n}(FaceProcessor));\r\nexport { FaceLandmark68NetBase };\r\n//# sourceMappingURL=FaceLandmark68NetBase.js.map","import { __extends } from \"tslib\";\r\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\r\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\r\nvar FaceLandmark68Net = /** @class */ (function (_super) {\r\n __extends(FaceLandmark68Net, _super);\r\n function FaceLandmark68Net(faceFeatureExtractor) {\r\n if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new FaceFeatureExtractor(); }\r\n return _super.call(this, 'FaceLandmark68Net', faceFeatureExtractor) || this;\r\n }\r\n FaceLandmark68Net.prototype.getDefaultModelName = function () {\r\n return 'face_landmark_68_model';\r\n };\r\n FaceLandmark68Net.prototype.getClassifierChannelsIn = function () {\r\n return 256;\r\n };\r\n return FaceLandmark68Net;\r\n}(FaceLandmark68NetBase));\r\nexport { FaceLandmark68Net };\r\n//# sourceMappingURL=FaceLandmark68Net.js.map","import { disposeUnusedWeightTensors } from '../common';\r\nimport { loadParamsFactory } from './loadParamsFactory';\r\nexport function extractParamsFromWeigthMapTiny(weightMap) {\r\n var paramMappings = [];\r\n var extractDenseBlock3Params = loadParamsFactory(weightMap, paramMappings).extractDenseBlock3Params;\r\n var params = {\r\n dense0: extractDenseBlock3Params('dense0', true),\r\n dense1: extractDenseBlock3Params('dense1'),\r\n dense2: extractDenseBlock3Params('dense2')\r\n };\r\n disposeUnusedWeightTensors(weightMap, paramMappings);\r\n return { params: params, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParamsFromWeigthMapTiny.js.map","import { extractWeightsFactory } from '../common';\r\nimport { extractorsFactory } from './extractorsFactory';\r\nexport function extractParamsTiny(weights) {\r\n var paramMappings = [];\r\n var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;\r\n var extractDenseBlock3Params = extractorsFactory(extractWeights, paramMappings).extractDenseBlock3Params;\r\n var dense0 = extractDenseBlock3Params(3, 32, 'dense0', true);\r\n var dense1 = extractDenseBlock3Params(32, 64, 'dense1');\r\n var dense2 = extractDenseBlock3Params(64, 128, 'dense2');\r\n if (getRemainingWeights().length !== 0) {\r\n throw new Error(\"weights remaing after extract: \" + getRemainingWeights().length);\r\n }\r\n return {\r\n paramMappings: paramMappings,\r\n params: { dense0: dense0, dense1: dense1, dense2: dense2 }\r\n };\r\n}\r\n//# sourceMappingURL=extractParamsTiny.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { toNetInput } from '../dom';\r\nimport { NeuralNetwork } from '../NeuralNetwork';\r\nimport { normalize } from '../ops';\r\nimport { denseBlock3 } from './denseBlock';\r\nimport { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny';\r\nimport { extractParamsTiny } from './extractParamsTiny';\r\nvar TinyFaceFeatureExtractor = /** @class */ (function (_super) {\r\n __extends(TinyFaceFeatureExtractor, _super);\r\n function TinyFaceFeatureExtractor() {\r\n return _super.call(this, 'TinyFaceFeatureExtractor') || this;\r\n }\r\n TinyFaceFeatureExtractor.prototype.forwardInput = function (input) {\r\n var params = this.params;\r\n if (!params) {\r\n throw new Error('TinyFaceFeatureExtractor - load model before inference');\r\n }\r\n return tf.tidy(function () {\r\n var batchTensor = input.toBatchTensor(112, true);\r\n var meanRgb = [122.782, 117.001, 104.298];\r\n var normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255));\r\n var out = denseBlock3(normalized, params.dense0, true);\r\n out = denseBlock3(out, params.dense1);\r\n out = denseBlock3(out, params.dense2);\r\n out = tf.avgPool(out, [14, 14], [2, 2], 'valid');\r\n return out;\r\n });\r\n };\r\n TinyFaceFeatureExtractor.prototype.forward = function (input) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this.forwardInput;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];\r\n }\r\n });\r\n });\r\n };\r\n TinyFaceFeatureExtractor.prototype.getDefaultModelName = function () {\r\n return 'face_feature_extractor_tiny_model';\r\n };\r\n TinyFaceFeatureExtractor.prototype.extractParamsFromWeigthMap = function (weightMap) {\r\n return extractParamsFromWeigthMapTiny(weightMap);\r\n };\r\n TinyFaceFeatureExtractor.prototype.extractParams = function (weights) {\r\n return extractParamsTiny(weights);\r\n };\r\n return TinyFaceFeatureExtractor;\r\n}(NeuralNetwork));\r\nexport { TinyFaceFeatureExtractor };\r\n//# sourceMappingURL=TinyFaceFeatureExtractor.js.map","import { __extends } from \"tslib\";\r\nimport { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor';\r\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\r\nvar FaceLandmark68TinyNet = /** @class */ (function (_super) {\r\n __extends(FaceLandmark68TinyNet, _super);\r\n function FaceLandmark68TinyNet(faceFeatureExtractor) {\r\n if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new TinyFaceFeatureExtractor(); }\r\n return _super.call(this, 'FaceLandmark68TinyNet', faceFeatureExtractor) || this;\r\n }\r\n FaceLandmark68TinyNet.prototype.getDefaultModelName = function () {\r\n return 'face_landmark_68_tiny_model';\r\n };\r\n FaceLandmark68TinyNet.prototype.getClassifierChannelsIn = function () {\r\n return 128;\r\n };\r\n return FaceLandmark68TinyNet;\r\n}(FaceLandmark68NetBase));\r\nexport { FaceLandmark68TinyNet };\r\n//# sourceMappingURL=FaceLandmark68TinyNet.js.map","import { __extends } from \"tslib\";\r\nimport { FaceLandmark68Net } from './FaceLandmark68Net';\r\nexport * from './FaceLandmark68Net';\r\nexport * from './FaceLandmark68TinyNet';\r\nvar FaceLandmarkNet = /** @class */ (function (_super) {\r\n __extends(FaceLandmarkNet, _super);\r\n function FaceLandmarkNet() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return FaceLandmarkNet;\r\n}(FaceLandmark68Net));\r\nexport { FaceLandmarkNet };\r\n//# sourceMappingURL=index.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function scale(x, params) {\r\n return tf.add(tf.mul(x, params.weights), params.biases);\r\n}\r\n//# sourceMappingURL=scaleLayer.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { scale } from './scaleLayer';\r\nfunction convLayer(x, params, strides, withRelu, padding) {\r\n if (padding === void 0) { padding = 'same'; }\r\n var _a = params.conv, filters = _a.filters, bias = _a.bias;\r\n var out = tf.conv2d(x, filters, strides, padding);\r\n out = tf.add(out, bias);\r\n out = scale(out, params.scale);\r\n return withRelu ? tf.relu(out) : out;\r\n}\r\nexport function conv(x, params) {\r\n return convLayer(x, params, [1, 1], true);\r\n}\r\nexport function convNoRelu(x, params) {\r\n return convLayer(x, params, [1, 1], false);\r\n}\r\nexport function convDown(x, params) {\r\n return convLayer(x, params, [2, 2], true, 'valid');\r\n}\r\n//# sourceMappingURL=convLayer.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { extractWeightsFactory } from '../common';\r\nimport { isFloat } from '../utils';\r\nfunction extractorsFactory(extractWeights, paramMappings) {\r\n function extractFilterValues(numFilterValues, numFilters, filterSize) {\r\n var weights = extractWeights(numFilterValues);\r\n var depth = weights.length / (numFilters * filterSize * filterSize);\r\n if (isFloat(depth)) {\r\n throw new Error(\"depth has to be an integer: \" + depth + \", weights.length: \" + weights.length + \", numFilters: \" + numFilters + \", filterSize: \" + filterSize);\r\n }\r\n return tf.tidy(function () { return tf.transpose(tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]), [2, 3, 1, 0]); });\r\n }\r\n function extractConvParams(numFilterValues, numFilters, filterSize, mappedPrefix) {\r\n var filters = extractFilterValues(numFilterValues, numFilters, filterSize);\r\n var bias = tf.tensor1d(extractWeights(numFilters));\r\n paramMappings.push({ paramPath: mappedPrefix + \"/filters\" }, { paramPath: mappedPrefix + \"/bias\" });\r\n return { filters: filters, bias: bias };\r\n }\r\n function extractScaleLayerParams(numWeights, mappedPrefix) {\r\n var weights = tf.tensor1d(extractWeights(numWeights));\r\n var biases = tf.tensor1d(extractWeights(numWeights));\r\n paramMappings.push({ paramPath: mappedPrefix + \"/weights\" }, { paramPath: mappedPrefix + \"/biases\" });\r\n return {\r\n weights: weights,\r\n biases: biases\r\n };\r\n }\r\n function extractConvLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix) {\r\n var conv = extractConvParams(numFilterValues, numFilters, filterSize, mappedPrefix + \"/conv\");\r\n var scale = extractScaleLayerParams(numFilters, mappedPrefix + \"/scale\");\r\n return { conv: conv, scale: scale };\r\n }\r\n function extractResidualLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix, isDown) {\r\n if (isDown === void 0) { isDown = false; }\r\n var conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, mappedPrefix + \"/conv1\");\r\n var conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix + \"/conv2\");\r\n return { conv1: conv1, conv2: conv2 };\r\n }\r\n return {\r\n extractConvLayerParams: extractConvLayerParams,\r\n extractResidualLayerParams: extractResidualLayerParams\r\n };\r\n}\r\nexport function extractParams(weights) {\r\n var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;\r\n var paramMappings = [];\r\n var _b = extractorsFactory(extractWeights, paramMappings), extractConvLayerParams = _b.extractConvLayerParams, extractResidualLayerParams = _b.extractResidualLayerParams;\r\n var conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down');\r\n var conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1');\r\n var conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2');\r\n var conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3');\r\n var conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true);\r\n var conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1');\r\n var conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2');\r\n var conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3');\r\n var conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true);\r\n var conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1');\r\n var conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2');\r\n var conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true);\r\n var conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1');\r\n var conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2');\r\n var conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out');\r\n var fc = tf.tidy(function () { return tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0]); });\r\n paramMappings.push({ paramPath: \"fc\" });\r\n if (getRemainingWeights().length !== 0) {\r\n throw new Error(\"weights remaing after extract: \" + getRemainingWeights().length);\r\n }\r\n var params = {\r\n conv32_down: conv32_down,\r\n conv32_1: conv32_1,\r\n conv32_2: conv32_2,\r\n conv32_3: conv32_3,\r\n conv64_down: conv64_down,\r\n conv64_1: conv64_1,\r\n conv64_2: conv64_2,\r\n conv64_3: conv64_3,\r\n conv128_down: conv128_down,\r\n conv128_1: conv128_1,\r\n conv128_2: conv128_2,\r\n conv256_down: conv256_down,\r\n conv256_1: conv256_1,\r\n conv256_2: conv256_2,\r\n conv256_down_out: conv256_down_out,\r\n fc: fc\r\n };\r\n return { params: params, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParams.js.map","import { disposeUnusedWeightTensors, extractWeightEntryFactory } from '../common';\r\nimport { isTensor2D } from '../utils';\r\nfunction extractorsFactory(weightMap, paramMappings) {\r\n var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\r\n function extractScaleLayerParams(prefix) {\r\n var weights = extractWeightEntry(prefix + \"/scale/weights\", 1);\r\n var biases = extractWeightEntry(prefix + \"/scale/biases\", 1);\r\n return { weights: weights, biases: biases };\r\n }\r\n function extractConvLayerParams(prefix) {\r\n var filters = extractWeightEntry(prefix + \"/conv/filters\", 4);\r\n var bias = extractWeightEntry(prefix + \"/conv/bias\", 1);\r\n var scale = extractScaleLayerParams(prefix);\r\n return { conv: { filters: filters, bias: bias }, scale: scale };\r\n }\r\n function extractResidualLayerParams(prefix) {\r\n return {\r\n conv1: extractConvLayerParams(prefix + \"/conv1\"),\r\n conv2: extractConvLayerParams(prefix + \"/conv2\")\r\n };\r\n }\r\n return {\r\n extractConvLayerParams: extractConvLayerParams,\r\n extractResidualLayerParams: extractResidualLayerParams\r\n };\r\n}\r\nexport function extractParamsFromWeigthMap(weightMap) {\r\n var paramMappings = [];\r\n var _a = extractorsFactory(weightMap, paramMappings), extractConvLayerParams = _a.extractConvLayerParams, extractResidualLayerParams = _a.extractResidualLayerParams;\r\n var conv32_down = extractConvLayerParams('conv32_down');\r\n var conv32_1 = extractResidualLayerParams('conv32_1');\r\n var conv32_2 = extractResidualLayerParams('conv32_2');\r\n var conv32_3 = extractResidualLayerParams('conv32_3');\r\n var conv64_down = extractResidualLayerParams('conv64_down');\r\n var conv64_1 = extractResidualLayerParams('conv64_1');\r\n var conv64_2 = extractResidualLayerParams('conv64_2');\r\n var conv64_3 = extractResidualLayerParams('conv64_3');\r\n var conv128_down = extractResidualLayerParams('conv128_down');\r\n var conv128_1 = extractResidualLayerParams('conv128_1');\r\n var conv128_2 = extractResidualLayerParams('conv128_2');\r\n var conv256_down = extractResidualLayerParams('conv256_down');\r\n var conv256_1 = extractResidualLayerParams('conv256_1');\r\n var conv256_2 = extractResidualLayerParams('conv256_2');\r\n var conv256_down_out = extractResidualLayerParams('conv256_down_out');\r\n var fc = weightMap['fc'];\r\n paramMappings.push({ originalPath: 'fc', paramPath: 'fc' });\r\n if (!isTensor2D(fc)) {\r\n throw new Error(\"expected weightMap[fc] to be a Tensor2D, instead have \" + fc);\r\n }\r\n var params = {\r\n conv32_down: conv32_down,\r\n conv32_1: conv32_1,\r\n conv32_2: conv32_2,\r\n conv32_3: conv32_3,\r\n conv64_down: conv64_down,\r\n conv64_1: conv64_1,\r\n conv64_2: conv64_2,\r\n conv64_3: conv64_3,\r\n conv128_down: conv128_down,\r\n conv128_1: conv128_1,\r\n conv128_2: conv128_2,\r\n conv256_down: conv256_down,\r\n conv256_1: conv256_1,\r\n conv256_2: conv256_2,\r\n conv256_down_out: conv256_down_out,\r\n fc: fc\r\n };\r\n disposeUnusedWeightTensors(weightMap, paramMappings);\r\n return { params: params, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParamsFromWeigthMap.js.map","import { __spreadArrays } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { conv, convDown, convNoRelu } from './convLayer';\r\nexport function residual(x, params) {\r\n var out = conv(x, params.conv1);\r\n out = convNoRelu(out, params.conv2);\r\n out = tf.add(out, x);\r\n out = tf.relu(out);\r\n return out;\r\n}\r\nexport function residualDown(x, params) {\r\n var out = convDown(x, params.conv1);\r\n out = convNoRelu(out, params.conv2);\r\n var pooled = tf.avgPool(x, 2, 2, 'valid');\r\n var zeros = tf.zeros(pooled.shape);\r\n var isPad = pooled.shape[3] !== out.shape[3];\r\n var isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2];\r\n if (isAdjustShape) {\r\n var padShapeX = __spreadArrays(out.shape);\r\n padShapeX[1] = 1;\r\n var zerosW = tf.zeros(padShapeX);\r\n out = tf.concat([out, zerosW], 1);\r\n var padShapeY = __spreadArrays(out.shape);\r\n padShapeY[2] = 1;\r\n var zerosH = tf.zeros(padShapeY);\r\n out = tf.concat([out, zerosH], 2);\r\n }\r\n pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled;\r\n out = tf.add(pooled, out);\r\n out = tf.relu(out);\r\n return out;\r\n}\r\n//# sourceMappingURL=residualLayer.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { toNetInput } from '../dom';\r\nimport { NeuralNetwork } from '../NeuralNetwork';\r\nimport { normalize } from '../ops';\r\nimport { convDown } from './convLayer';\r\nimport { extractParams } from './extractParams';\r\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\r\nimport { residual, residualDown } from './residualLayer';\r\nvar FaceRecognitionNet = /** @class */ (function (_super) {\r\n __extends(FaceRecognitionNet, _super);\r\n function FaceRecognitionNet() {\r\n return _super.call(this, 'FaceRecognitionNet') || this;\r\n }\r\n FaceRecognitionNet.prototype.forwardInput = function (input) {\r\n var params = this.params;\r\n if (!params) {\r\n throw new Error('FaceRecognitionNet - load model before inference');\r\n }\r\n return tf.tidy(function () {\r\n var batchTensor = input.toBatchTensor(150, true).toFloat();\r\n var meanRgb = [122.782, 117.001, 104.298];\r\n var normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256));\r\n var out = convDown(normalized, params.conv32_down);\r\n out = tf.maxPool(out, 3, 2, 'valid');\r\n out = residual(out, params.conv32_1);\r\n out = residual(out, params.conv32_2);\r\n out = residual(out, params.conv32_3);\r\n out = residualDown(out, params.conv64_down);\r\n out = residual(out, params.conv64_1);\r\n out = residual(out, params.conv64_2);\r\n out = residual(out, params.conv64_3);\r\n out = residualDown(out, params.conv128_down);\r\n out = residual(out, params.conv128_1);\r\n out = residual(out, params.conv128_2);\r\n out = residualDown(out, params.conv256_down);\r\n out = residual(out, params.conv256_1);\r\n out = residual(out, params.conv256_2);\r\n out = residualDown(out, params.conv256_down_out);\r\n var globalAvg = out.mean([1, 2]);\r\n var fullyConnected = tf.matMul(globalAvg, params.fc);\r\n return fullyConnected;\r\n });\r\n };\r\n FaceRecognitionNet.prototype.forward = function (input) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this.forwardInput;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];\r\n }\r\n });\r\n });\r\n };\r\n FaceRecognitionNet.prototype.computeFaceDescriptor = function (input) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var netInput, faceDescriptorTensors, faceDescriptorsForBatch;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, toNetInput(input)];\r\n case 1:\r\n netInput = _a.sent();\r\n faceDescriptorTensors = tf.tidy(function () { return tf.unstack(_this.forwardInput(netInput)); });\r\n return [4 /*yield*/, Promise.all(faceDescriptorTensors.map(function (t) { return t.data(); }))];\r\n case 2:\r\n faceDescriptorsForBatch = _a.sent();\r\n faceDescriptorTensors.forEach(function (t) { return t.dispose(); });\r\n return [2 /*return*/, netInput.isBatchInput\r\n ? faceDescriptorsForBatch\r\n : faceDescriptorsForBatch[0]];\r\n }\r\n });\r\n });\r\n };\r\n FaceRecognitionNet.prototype.getDefaultModelName = function () {\r\n return 'face_recognition_model';\r\n };\r\n FaceRecognitionNet.prototype.extractParamsFromWeigthMap = function (weightMap) {\r\n return extractParamsFromWeigthMap(weightMap);\r\n };\r\n FaceRecognitionNet.prototype.extractParams = function (weights) {\r\n return extractParams(weights);\r\n };\r\n return FaceRecognitionNet;\r\n}(NeuralNetwork));\r\nexport { FaceRecognitionNet };\r\n//# sourceMappingURL=FaceRecognitionNet.js.map","export function extendWithFaceDescriptor(sourceObj, descriptor) {\r\n var extension = { descriptor: descriptor };\r\n return Object.assign({}, sourceObj, extension);\r\n}\r\n//# sourceMappingURL=WithFaceDescriptor.js.map","export function isWithAge(obj) {\r\n return typeof obj['age'] === 'number';\r\n}\r\nexport function extendWithAge(sourceObj, age) {\r\n var extension = { age: age };\r\n return Object.assign({}, sourceObj, extension);\r\n}\r\n//# sourceMappingURL=WithAge.js.map","import { Gender } from '../ageGenderNet/types';\r\nimport { isValidProbablitiy } from '../utils';\r\nexport function isWithGender(obj) {\r\n return (obj['gender'] === Gender.MALE || obj['gender'] === Gender.FEMALE)\r\n && isValidProbablitiy(obj['genderProbability']);\r\n}\r\nexport function extendWithGender(sourceObj, gender, genderProbability) {\r\n var extension = { gender: gender, genderProbability: genderProbability };\r\n return Object.assign({}, sourceObj, extension);\r\n}\r\n//# sourceMappingURL=WithGender.js.map","var MtcnnOptions = /** @class */ (function () {\r\n function MtcnnOptions(_a) {\r\n var _b = _a === void 0 ? {} : _a, minFaceSize = _b.minFaceSize, scaleFactor = _b.scaleFactor, maxNumScales = _b.maxNumScales, scoreThresholds = _b.scoreThresholds, scaleSteps = _b.scaleSteps;\r\n this._name = 'MtcnnOptions';\r\n this._minFaceSize = minFaceSize || 20;\r\n this._scaleFactor = scaleFactor || 0.709;\r\n this._maxNumScales = maxNumScales || 10;\r\n this._scoreThresholds = scoreThresholds || [0.6, 0.7, 0.7];\r\n this._scaleSteps = scaleSteps;\r\n if (typeof this._minFaceSize !== 'number' || this._minFaceSize < 0) {\r\n throw new Error(this._name + \" - expected minFaceSize to be a number > 0\");\r\n }\r\n if (typeof this._scaleFactor !== 'number' || this._scaleFactor <= 0 || this._scaleFactor >= 1) {\r\n throw new Error(this._name + \" - expected scaleFactor to be a number between 0 and 1\");\r\n }\r\n if (typeof this._maxNumScales !== 'number' || this._maxNumScales < 0) {\r\n throw new Error(this._name + \" - expected maxNumScales to be a number > 0\");\r\n }\r\n if (!Array.isArray(this._scoreThresholds)\r\n || this._scoreThresholds.length !== 3\r\n || this._scoreThresholds.some(function (th) { return typeof th !== 'number'; })) {\r\n throw new Error(this._name + \" - expected scoreThresholds to be an array of numbers of length 3\");\r\n }\r\n if (this._scaleSteps\r\n && (!Array.isArray(this._scaleSteps) || this._scaleSteps.some(function (th) { return typeof th !== 'number'; }))) {\r\n throw new Error(this._name + \" - expected scaleSteps to be an array of numbers\");\r\n }\r\n }\r\n Object.defineProperty(MtcnnOptions.prototype, \"minFaceSize\", {\r\n get: function () { return this._minFaceSize; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MtcnnOptions.prototype, \"scaleFactor\", {\r\n get: function () { return this._scaleFactor; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MtcnnOptions.prototype, \"maxNumScales\", {\r\n get: function () { return this._maxNumScales; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MtcnnOptions.prototype, \"scoreThresholds\", {\r\n get: function () { return this._scoreThresholds; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(MtcnnOptions.prototype, \"scaleSteps\", {\r\n get: function () { return this._scaleSteps; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return MtcnnOptions;\r\n}());\r\nexport { MtcnnOptions };\r\n//# sourceMappingURL=MtcnnOptions.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { extractWeightsFactory } from '../common';\r\nfunction extractorsFactory(extractWeights, paramMappings) {\r\n function extractDepthwiseConvParams(numChannels, mappedPrefix) {\r\n var filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]);\r\n var batch_norm_scale = tf.tensor1d(extractWeights(numChannels));\r\n var batch_norm_offset = tf.tensor1d(extractWeights(numChannels));\r\n var batch_norm_mean = tf.tensor1d(extractWeights(numChannels));\r\n var batch_norm_variance = tf.tensor1d(extractWeights(numChannels));\r\n 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\" });\r\n return {\r\n filters: filters,\r\n batch_norm_scale: batch_norm_scale,\r\n batch_norm_offset: batch_norm_offset,\r\n batch_norm_mean: batch_norm_mean,\r\n batch_norm_variance: batch_norm_variance\r\n };\r\n }\r\n function extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, isPointwiseConv) {\r\n var filters = tf.tensor4d(extractWeights(channelsIn * channelsOut * filterSize * filterSize), [filterSize, filterSize, channelsIn, channelsOut]);\r\n var bias = tf.tensor1d(extractWeights(channelsOut));\r\n paramMappings.push({ paramPath: mappedPrefix + \"/filters\" }, { paramPath: mappedPrefix + \"/\" + (isPointwiseConv ? 'batch_norm_offset' : 'bias') });\r\n return { filters: filters, bias: bias };\r\n }\r\n function extractPointwiseConvParams(channelsIn, channelsOut, filterSize, mappedPrefix) {\r\n var _a = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true), filters = _a.filters, bias = _a.bias;\r\n return {\r\n filters: filters,\r\n batch_norm_offset: bias\r\n };\r\n }\r\n function extractConvPairParams(channelsIn, channelsOut, mappedPrefix) {\r\n var depthwise_conv = extractDepthwiseConvParams(channelsIn, mappedPrefix + \"/depthwise_conv\");\r\n var pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, mappedPrefix + \"/pointwise_conv\");\r\n return { depthwise_conv: depthwise_conv, pointwise_conv: pointwise_conv };\r\n }\r\n function extractMobilenetV1Params() {\r\n var conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0');\r\n var conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1');\r\n var conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2');\r\n var conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3');\r\n var conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4');\r\n var conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5');\r\n var conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6');\r\n var conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7');\r\n var conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8');\r\n var conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9');\r\n var conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10');\r\n var conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11');\r\n var conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12');\r\n var conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13');\r\n return {\r\n conv_0: conv_0,\r\n conv_1: conv_1,\r\n conv_2: conv_2,\r\n conv_3: conv_3,\r\n conv_4: conv_4,\r\n conv_5: conv_5,\r\n conv_6: conv_6,\r\n conv_7: conv_7,\r\n conv_8: conv_8,\r\n conv_9: conv_9,\r\n conv_10: conv_10,\r\n conv_11: conv_11,\r\n conv_12: conv_12,\r\n conv_13: conv_13\r\n };\r\n }\r\n function extractPredictionLayerParams() {\r\n var conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0');\r\n var conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1');\r\n var conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2');\r\n var conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3');\r\n var conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4');\r\n var conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5');\r\n var conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6');\r\n var conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7');\r\n var box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor');\r\n var class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor');\r\n var box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor');\r\n var class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor');\r\n var box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor');\r\n var class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor');\r\n var box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor');\r\n var class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor');\r\n var box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor');\r\n var class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor');\r\n var box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor');\r\n var class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor');\r\n var box_predictor_0 = {\r\n box_encoding_predictor: box_encoding_0_predictor,\r\n class_predictor: class_predictor_0\r\n };\r\n var box_predictor_1 = {\r\n box_encoding_predictor: box_encoding_1_predictor,\r\n class_predictor: class_predictor_1\r\n };\r\n var box_predictor_2 = {\r\n box_encoding_predictor: box_encoding_2_predictor,\r\n class_predictor: class_predictor_2\r\n };\r\n var box_predictor_3 = {\r\n box_encoding_predictor: box_encoding_3_predictor,\r\n class_predictor: class_predictor_3\r\n };\r\n var box_predictor_4 = {\r\n box_encoding_predictor: box_encoding_4_predictor,\r\n class_predictor: class_predictor_4\r\n };\r\n var box_predictor_5 = {\r\n box_encoding_predictor: box_encoding_5_predictor,\r\n class_predictor: class_predictor_5\r\n };\r\n return {\r\n conv_0: conv_0,\r\n conv_1: conv_1,\r\n conv_2: conv_2,\r\n conv_3: conv_3,\r\n conv_4: conv_4,\r\n conv_5: conv_5,\r\n conv_6: conv_6,\r\n conv_7: conv_7,\r\n box_predictor_0: box_predictor_0,\r\n box_predictor_1: box_predictor_1,\r\n box_predictor_2: box_predictor_2,\r\n box_predictor_3: box_predictor_3,\r\n box_predictor_4: box_predictor_4,\r\n box_predictor_5: box_predictor_5\r\n };\r\n }\r\n return {\r\n extractMobilenetV1Params: extractMobilenetV1Params,\r\n extractPredictionLayerParams: extractPredictionLayerParams\r\n };\r\n}\r\nexport function extractParams(weights) {\r\n var paramMappings = [];\r\n var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;\r\n var _b = extractorsFactory(extractWeights, paramMappings), extractMobilenetV1Params = _b.extractMobilenetV1Params, extractPredictionLayerParams = _b.extractPredictionLayerParams;\r\n var mobilenetv1 = extractMobilenetV1Params();\r\n var prediction_layer = extractPredictionLayerParams();\r\n var extra_dim = tf.tensor3d(extractWeights(5118 * 4), [1, 5118, 4]);\r\n var output_layer = {\r\n extra_dim: extra_dim\r\n };\r\n paramMappings.push({ paramPath: 'output_layer/extra_dim' });\r\n if (getRemainingWeights().length !== 0) {\r\n throw new Error(\"weights remaing after extract: \" + getRemainingWeights().length);\r\n }\r\n return {\r\n params: {\r\n mobilenetv1: mobilenetv1,\r\n prediction_layer: prediction_layer,\r\n output_layer: output_layer\r\n },\r\n paramMappings: paramMappings\r\n };\r\n}\r\n//# sourceMappingURL=extractParams.js.map","import { disposeUnusedWeightTensors, extractWeightEntryFactory } from '../common';\r\nimport { isTensor3D } from '../utils';\r\nfunction extractorsFactory(weightMap, paramMappings) {\r\n var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\r\n function extractPointwiseConvParams(prefix, idx, mappedPrefix) {\r\n var filters = extractWeightEntry(prefix + \"/Conv2d_\" + idx + \"_pointwise/weights\", 4, mappedPrefix + \"/filters\");\r\n var batch_norm_offset = extractWeightEntry(prefix + \"/Conv2d_\" + idx + \"_pointwise/convolution_bn_offset\", 1, mappedPrefix + \"/batch_norm_offset\");\r\n return { filters: filters, batch_norm_offset: batch_norm_offset };\r\n }\r\n function extractConvPairParams(idx) {\r\n var mappedPrefix = \"mobilenetv1/conv_\" + idx;\r\n var prefixDepthwiseConv = \"MobilenetV1/Conv2d_\" + idx + \"_depthwise\";\r\n var mappedPrefixDepthwiseConv = mappedPrefix + \"/depthwise_conv\";\r\n var mappedPrefixPointwiseConv = mappedPrefix + \"/pointwise_conv\";\r\n var filters = extractWeightEntry(prefixDepthwiseConv + \"/depthwise_weights\", 4, mappedPrefixDepthwiseConv + \"/filters\");\r\n var batch_norm_scale = extractWeightEntry(prefixDepthwiseConv + \"/BatchNorm/gamma\", 1, mappedPrefixDepthwiseConv + \"/batch_norm_scale\");\r\n var batch_norm_offset = extractWeightEntry(prefixDepthwiseConv + \"/BatchNorm/beta\", 1, mappedPrefixDepthwiseConv + \"/batch_norm_offset\");\r\n var batch_norm_mean = extractWeightEntry(prefixDepthwiseConv + \"/BatchNorm/moving_mean\", 1, mappedPrefixDepthwiseConv + \"/batch_norm_mean\");\r\n var batch_norm_variance = extractWeightEntry(prefixDepthwiseConv + \"/BatchNorm/moving_variance\", 1, mappedPrefixDepthwiseConv + \"/batch_norm_variance\");\r\n return {\r\n depthwise_conv: {\r\n filters: filters,\r\n batch_norm_scale: batch_norm_scale,\r\n batch_norm_offset: batch_norm_offset,\r\n batch_norm_mean: batch_norm_mean,\r\n batch_norm_variance: batch_norm_variance\r\n },\r\n pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv)\r\n };\r\n }\r\n function extractMobilenetV1Params() {\r\n return {\r\n conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),\r\n conv_1: extractConvPairParams(1),\r\n conv_2: extractConvPairParams(2),\r\n conv_3: extractConvPairParams(3),\r\n conv_4: extractConvPairParams(4),\r\n conv_5: extractConvPairParams(5),\r\n conv_6: extractConvPairParams(6),\r\n conv_7: extractConvPairParams(7),\r\n conv_8: extractConvPairParams(8),\r\n conv_9: extractConvPairParams(9),\r\n conv_10: extractConvPairParams(10),\r\n conv_11: extractConvPairParams(11),\r\n conv_12: extractConvPairParams(12),\r\n conv_13: extractConvPairParams(13)\r\n };\r\n }\r\n function extractConvParams(prefix, mappedPrefix) {\r\n var filters = extractWeightEntry(prefix + \"/weights\", 4, mappedPrefix + \"/filters\");\r\n var bias = extractWeightEntry(prefix + \"/biases\", 1, mappedPrefix + \"/bias\");\r\n return { filters: filters, bias: bias };\r\n }\r\n function extractBoxPredictorParams(idx) {\r\n var box_encoding_predictor = extractConvParams(\"Prediction/BoxPredictor_\" + idx + \"/BoxEncodingPredictor\", \"prediction_layer/box_predictor_\" + idx + \"/box_encoding_predictor\");\r\n var class_predictor = extractConvParams(\"Prediction/BoxPredictor_\" + idx + \"/ClassPredictor\", \"prediction_layer/box_predictor_\" + idx + \"/class_predictor\");\r\n return { box_encoding_predictor: box_encoding_predictor, class_predictor: class_predictor };\r\n }\r\n function extractPredictionLayerParams() {\r\n return {\r\n conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),\r\n conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),\r\n conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),\r\n conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),\r\n conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),\r\n conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),\r\n conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),\r\n conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),\r\n box_predictor_0: extractBoxPredictorParams(0),\r\n box_predictor_1: extractBoxPredictorParams(1),\r\n box_predictor_2: extractBoxPredictorParams(2),\r\n box_predictor_3: extractBoxPredictorParams(3),\r\n box_predictor_4: extractBoxPredictorParams(4),\r\n box_predictor_5: extractBoxPredictorParams(5)\r\n };\r\n }\r\n return {\r\n extractMobilenetV1Params: extractMobilenetV1Params,\r\n extractPredictionLayerParams: extractPredictionLayerParams\r\n };\r\n}\r\nexport function extractParamsFromWeigthMap(weightMap) {\r\n var paramMappings = [];\r\n var _a = extractorsFactory(weightMap, paramMappings), extractMobilenetV1Params = _a.extractMobilenetV1Params, extractPredictionLayerParams = _a.extractPredictionLayerParams;\r\n var extra_dim = weightMap['Output/extra_dim'];\r\n paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' });\r\n if (!isTensor3D(extra_dim)) {\r\n throw new Error(\"expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have \" + extra_dim);\r\n }\r\n var params = {\r\n mobilenetv1: extractMobilenetV1Params(),\r\n prediction_layer: extractPredictionLayerParams(),\r\n output_layer: {\r\n extra_dim: extra_dim\r\n }\r\n };\r\n disposeUnusedWeightTensors(weightMap, paramMappings);\r\n return { params: params, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParamsFromWeigthMap.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function pointwiseConvLayer(x, params, strides) {\r\n return tf.tidy(function () {\r\n var out = tf.conv2d(x, params.filters, strides, 'same');\r\n out = tf.add(out, params.batch_norm_offset);\r\n return tf.clipByValue(out, 0, 6);\r\n });\r\n}\r\n//# sourceMappingURL=pointwiseConvLayer.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\r\nvar epsilon = 0.0010000000474974513;\r\nfunction depthwiseConvLayer(x, params, strides) {\r\n return tf.tidy(function () {\r\n var out = tf.depthwiseConv2d(x, params.filters, strides, 'same');\r\n out = tf.batchNorm(out, params.batch_norm_mean, params.batch_norm_variance, params.batch_norm_offset, params.batch_norm_scale, epsilon);\r\n return tf.clipByValue(out, 0, 6);\r\n });\r\n}\r\nfunction getStridesForLayerIdx(layerIdx) {\r\n return [2, 4, 6, 12].some(function (idx) { return idx === layerIdx; }) ? [2, 2] : [1, 1];\r\n}\r\nexport function mobileNetV1(x, params) {\r\n return tf.tidy(function () {\r\n var conv11 = null;\r\n var out = pointwiseConvLayer(x, params.conv_0, [2, 2]);\r\n var convPairParams = [\r\n params.conv_1,\r\n params.conv_2,\r\n params.conv_3,\r\n params.conv_4,\r\n params.conv_5,\r\n params.conv_6,\r\n params.conv_7,\r\n params.conv_8,\r\n params.conv_9,\r\n params.conv_10,\r\n params.conv_11,\r\n params.conv_12,\r\n params.conv_13\r\n ];\r\n convPairParams.forEach(function (param, i) {\r\n var layerIdx = i + 1;\r\n var depthwiseConvStrides = getStridesForLayerIdx(layerIdx);\r\n out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides);\r\n out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]);\r\n if (layerIdx === 11) {\r\n conv11 = out;\r\n }\r\n });\r\n if (conv11 === null) {\r\n throw new Error('mobileNetV1 - output of conv layer 11 is null');\r\n }\r\n return {\r\n out: out,\r\n conv11: conv11\r\n };\r\n });\r\n}\r\n//# sourceMappingURL=mobileNetV1.js.map","export function nonMaxSuppression(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold) {\r\n var numBoxes = boxes.shape[0];\r\n var outputSize = Math.min(maxOutputSize, numBoxes);\r\n var candidates = scores\r\n .map(function (score, boxIndex) { return ({ score: score, boxIndex: boxIndex }); })\r\n .filter(function (c) { return c.score > scoreThreshold; })\r\n .sort(function (c1, c2) { return c2.score - c1.score; });\r\n var suppressFunc = function (x) { return x <= iouThreshold ? 1 : 0; };\r\n var selected = [];\r\n candidates.forEach(function (c) {\r\n if (selected.length >= outputSize) {\r\n return;\r\n }\r\n var originalScore = c.score;\r\n for (var j = selected.length - 1; j >= 0; --j) {\r\n var iou = IOU(boxes, c.boxIndex, selected[j]);\r\n if (iou === 0.0) {\r\n continue;\r\n }\r\n c.score *= suppressFunc(iou);\r\n if (c.score <= scoreThreshold) {\r\n break;\r\n }\r\n }\r\n if (originalScore === c.score) {\r\n selected.push(c.boxIndex);\r\n }\r\n });\r\n return selected;\r\n}\r\nfunction IOU(boxes, i, j) {\r\n var boxesData = boxes.arraySync();\r\n var yminI = Math.min(boxesData[i][0], boxesData[i][2]);\r\n var xminI = Math.min(boxesData[i][1], boxesData[i][3]);\r\n var ymaxI = Math.max(boxesData[i][0], boxesData[i][2]);\r\n var xmaxI = Math.max(boxesData[i][1], boxesData[i][3]);\r\n var yminJ = Math.min(boxesData[j][0], boxesData[j][2]);\r\n var xminJ = Math.min(boxesData[j][1], boxesData[j][3]);\r\n var ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]);\r\n var xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]);\r\n var areaI = (ymaxI - yminI) * (xmaxI - xminI);\r\n var areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ);\r\n if (areaI <= 0 || areaJ <= 0) {\r\n return 0.0;\r\n }\r\n var intersectionYmin = Math.max(yminI, yminJ);\r\n var intersectionXmin = Math.max(xminI, xminJ);\r\n var intersectionYmax = Math.min(ymaxI, ymaxJ);\r\n var intersectionXmax = Math.min(xmaxI, xmaxJ);\r\n var intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0) *\r\n Math.max(intersectionXmax - intersectionXmin, 0.0);\r\n return intersectionArea / (areaI + areaJ - intersectionArea);\r\n}\r\n//# sourceMappingURL=nonMaxSuppression.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nfunction getCenterCoordinatesAndSizesLayer(x) {\r\n var vec = tf.unstack(tf.transpose(x, [1, 0]));\r\n var sizes = [\r\n tf.sub(vec[2], vec[0]),\r\n tf.sub(vec[3], vec[1])\r\n ];\r\n var centers = [\r\n tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),\r\n tf.add(vec[1], tf.div(sizes[1], tf.scalar(2)))\r\n ];\r\n return {\r\n sizes: sizes,\r\n centers: centers\r\n };\r\n}\r\nfunction decodeBoxesLayer(x0, x1) {\r\n var _a = getCenterCoordinatesAndSizesLayer(x0), sizes = _a.sizes, centers = _a.centers;\r\n var vec = tf.unstack(tf.transpose(x1, [1, 0]));\r\n var div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2));\r\n var add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0]);\r\n var div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2));\r\n var add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1]);\r\n return tf.transpose(tf.stack([\r\n tf.sub(add0_out, div0_out),\r\n tf.sub(add1_out, div1_out),\r\n tf.add(add0_out, div0_out),\r\n tf.add(add1_out, div1_out)\r\n ]), [1, 0]);\r\n}\r\nexport function outputLayer(boxPredictions, classPredictions, params) {\r\n return tf.tidy(function () {\r\n var batchSize = boxPredictions.shape[0];\r\n var boxes = decodeBoxesLayer(tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]), tf.reshape(boxPredictions, [-1, 4]));\r\n boxes = tf.reshape(boxes, [batchSize, (boxes.shape[0] / batchSize), 4]);\r\n var scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]));\r\n var scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]);\r\n scores = tf.reshape(scores, [batchSize, scores.shape[1]]);\r\n var boxesByBatch = tf.unstack(boxes);\r\n var scoresByBatch = tf.unstack(scores);\r\n return {\r\n boxes: boxesByBatch,\r\n scores: scoresByBatch\r\n };\r\n });\r\n}\r\n//# sourceMappingURL=outputLayer.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { convLayer } from '../common';\r\nexport function boxPredictionLayer(x, params) {\r\n return tf.tidy(function () {\r\n var batchSize = x.shape[0];\r\n var boxPredictionEncoding = tf.reshape(convLayer(x, params.box_encoding_predictor), [batchSize, -1, 1, 4]);\r\n var classPrediction = tf.reshape(convLayer(x, params.class_predictor), [batchSize, -1, 3]);\r\n return {\r\n boxPredictionEncoding: boxPredictionEncoding,\r\n classPrediction: classPrediction\r\n };\r\n });\r\n}\r\n//# sourceMappingURL=boxPredictionLayer.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { boxPredictionLayer } from './boxPredictionLayer';\r\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\r\nexport function predictionLayer(x, conv11, params) {\r\n return tf.tidy(function () {\r\n var conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]);\r\n var conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]);\r\n var conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]);\r\n var conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]);\r\n var conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]);\r\n var conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]);\r\n var conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]);\r\n var conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]);\r\n var boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0);\r\n var boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1);\r\n var boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2);\r\n var boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3);\r\n var boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4);\r\n var boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5);\r\n var boxPredictions = tf.concat([\r\n boxPrediction0.boxPredictionEncoding,\r\n boxPrediction1.boxPredictionEncoding,\r\n boxPrediction2.boxPredictionEncoding,\r\n boxPrediction3.boxPredictionEncoding,\r\n boxPrediction4.boxPredictionEncoding,\r\n boxPrediction5.boxPredictionEncoding\r\n ], 1);\r\n var classPredictions = tf.concat([\r\n boxPrediction0.classPrediction,\r\n boxPrediction1.classPrediction,\r\n boxPrediction2.classPrediction,\r\n boxPrediction3.classPrediction,\r\n boxPrediction4.classPrediction,\r\n boxPrediction5.classPrediction\r\n ], 1);\r\n return {\r\n boxPredictions: boxPredictions,\r\n classPredictions: classPredictions\r\n };\r\n });\r\n}\r\n//# sourceMappingURL=predictionLayer.js.map","var SsdMobilenetv1Options = /** @class */ (function () {\r\n function SsdMobilenetv1Options(_a) {\r\n var _b = _a === void 0 ? {} : _a, minConfidence = _b.minConfidence, maxResults = _b.maxResults;\r\n this._name = 'SsdMobilenetv1Options';\r\n this._minConfidence = minConfidence || 0.5;\r\n this._maxResults = maxResults || 100;\r\n if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) {\r\n throw new Error(this._name + \" - expected minConfidence to be a number between 0 and 1\");\r\n }\r\n if (typeof this._maxResults !== 'number') {\r\n throw new Error(this._name + \" - expected maxResults to be a number\");\r\n }\r\n }\r\n Object.defineProperty(SsdMobilenetv1Options.prototype, \"minConfidence\", {\r\n get: function () { return this._minConfidence; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SsdMobilenetv1Options.prototype, \"maxResults\", {\r\n get: function () { return this._maxResults; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return SsdMobilenetv1Options;\r\n}());\r\nexport { SsdMobilenetv1Options };\r\n//# sourceMappingURL=SsdMobilenetv1Options.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { Rect } from '../classes';\r\nimport { FaceDetection } from '../classes/FaceDetection';\r\nimport { toNetInput } from '../dom';\r\nimport { NeuralNetwork } from '../NeuralNetwork';\r\nimport { extractParams } from './extractParams';\r\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\r\nimport { mobileNetV1 } from './mobileNetV1';\r\nimport { nonMaxSuppression } from './nonMaxSuppression';\r\nimport { outputLayer } from './outputLayer';\r\nimport { predictionLayer } from './predictionLayer';\r\nimport { SsdMobilenetv1Options } from './SsdMobilenetv1Options';\r\nvar SsdMobilenetv1 = /** @class */ (function (_super) {\r\n __extends(SsdMobilenetv1, _super);\r\n function SsdMobilenetv1() {\r\n return _super.call(this, 'SsdMobilenetv1') || this;\r\n }\r\n SsdMobilenetv1.prototype.forwardInput = function (input) {\r\n var params = this.params;\r\n if (!params) {\r\n throw new Error('SsdMobilenetv1 - load model before inference');\r\n }\r\n return tf.tidy(function () {\r\n var batchTensor = input.toBatchTensor(512, false).toFloat();\r\n var x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1));\r\n var features = mobileNetV1(x, params.mobilenetv1);\r\n var _a = predictionLayer(features.out, features.conv11, params.prediction_layer), boxPredictions = _a.boxPredictions, classPredictions = _a.classPredictions;\r\n return outputLayer(boxPredictions, classPredictions, params.output_layer);\r\n });\r\n };\r\n SsdMobilenetv1.prototype.forward = function (input) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this.forwardInput;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])];\r\n }\r\n });\r\n });\r\n };\r\n SsdMobilenetv1.prototype.locateFaces = function (input, options) {\r\n if (options === void 0) { options = {}; }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, maxResults, minConfidence, netInput, _b, _boxes, _scores, boxes, scores, i, scoresData, _c, _d, iouThreshold, indices, reshapedDims, inputSize, padX, padY, boxesData, results;\r\n return __generator(this, function (_e) {\r\n switch (_e.label) {\r\n case 0:\r\n _a = new SsdMobilenetv1Options(options), maxResults = _a.maxResults, minConfidence = _a.minConfidence;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1:\r\n netInput = _e.sent();\r\n _b = this.forwardInput(netInput), _boxes = _b.boxes, _scores = _b.scores;\r\n boxes = _boxes[0];\r\n scores = _scores[0];\r\n for (i = 1; i < _boxes.length; i++) {\r\n _boxes[i].dispose();\r\n _scores[i].dispose();\r\n }\r\n _d = (_c = Array).from;\r\n return [4 /*yield*/, scores.data()];\r\n case 2:\r\n scoresData = _d.apply(_c, [_e.sent()]);\r\n iouThreshold = 0.5;\r\n indices = nonMaxSuppression(boxes, scoresData, maxResults, iouThreshold, minConfidence);\r\n reshapedDims = netInput.getReshapedInputDimensions(0);\r\n inputSize = netInput.inputSize;\r\n padX = inputSize / reshapedDims.width;\r\n padY = inputSize / reshapedDims.height;\r\n boxesData = boxes.arraySync();\r\n results = indices\r\n .map(function (idx) {\r\n var _a = [\r\n Math.max(0, boxesData[idx][0]),\r\n Math.min(1.0, boxesData[idx][2])\r\n ].map(function (val) { return val * padY; }), top = _a[0], bottom = _a[1];\r\n var _b = [\r\n Math.max(0, boxesData[idx][1]),\r\n Math.min(1.0, boxesData[idx][3])\r\n ].map(function (val) { return val * padX; }), left = _b[0], right = _b[1];\r\n return new FaceDetection(scoresData[idx], new Rect(left, top, right - left, bottom - top), {\r\n height: netInput.getInputHeight(0),\r\n width: netInput.getInputWidth(0)\r\n });\r\n });\r\n boxes.dispose();\r\n scores.dispose();\r\n return [2 /*return*/, results];\r\n }\r\n });\r\n });\r\n };\r\n SsdMobilenetv1.prototype.getDefaultModelName = function () {\r\n return 'ssd_mobilenetv1_model';\r\n };\r\n SsdMobilenetv1.prototype.extractParamsFromWeigthMap = function (weightMap) {\r\n return extractParamsFromWeigthMap(weightMap);\r\n };\r\n SsdMobilenetv1.prototype.extractParams = function (weights) {\r\n return extractParams(weights);\r\n };\r\n return SsdMobilenetv1;\r\n}(NeuralNetwork));\r\nexport { SsdMobilenetv1 };\r\n//# sourceMappingURL=SsdMobilenetv1.js.map","import { __extends } from \"tslib\";\r\nimport { SsdMobilenetv1 } from './SsdMobilenetv1';\r\nexport * from './SsdMobilenetv1';\r\nexport * from './SsdMobilenetv1Options';\r\nexport function createSsdMobilenetv1(weights) {\r\n var net = new SsdMobilenetv1();\r\n net.extractWeights(weights);\r\n return net;\r\n}\r\nexport function createFaceDetectionNet(weights) {\r\n return createSsdMobilenetv1(weights);\r\n}\r\n// alias for backward compatibily\r\nvar FaceDetectionNet = /** @class */ (function (_super) {\r\n __extends(FaceDetectionNet, _super);\r\n function FaceDetectionNet() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return FaceDetectionNet;\r\n}(SsdMobilenetv1));\r\nexport { FaceDetectionNet };\r\n//# sourceMappingURL=index.js.map","export var TinyYolov2SizeType;\r\n(function (TinyYolov2SizeType) {\r\n TinyYolov2SizeType[TinyYolov2SizeType[\"XS\"] = 224] = \"XS\";\r\n TinyYolov2SizeType[TinyYolov2SizeType[\"SM\"] = 320] = \"SM\";\r\n TinyYolov2SizeType[TinyYolov2SizeType[\"MD\"] = 416] = \"MD\";\r\n TinyYolov2SizeType[TinyYolov2SizeType[\"LG\"] = 608] = \"LG\";\r\n})(TinyYolov2SizeType || (TinyYolov2SizeType = {}));\r\nvar TinyYolov2Options = /** @class */ (function () {\r\n function TinyYolov2Options(_a) {\r\n var _b = _a === void 0 ? {} : _a, inputSize = _b.inputSize, scoreThreshold = _b.scoreThreshold;\r\n this._name = 'TinyYolov2Options';\r\n this._inputSize = inputSize || 416;\r\n this._scoreThreshold = scoreThreshold || 0.5;\r\n if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) {\r\n throw new Error(this._name + \" - expected inputSize to be a number divisible by 32\");\r\n }\r\n if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) {\r\n throw new Error(this._name + \" - expected scoreThreshold to be a number between 0 and 1\");\r\n }\r\n }\r\n Object.defineProperty(TinyYolov2Options.prototype, \"inputSize\", {\r\n get: function () { return this._inputSize; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TinyYolov2Options.prototype, \"scoreThreshold\", {\r\n get: function () { return this._scoreThreshold; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return TinyYolov2Options;\r\n}());\r\nexport { TinyYolov2Options };\r\n//# sourceMappingURL=TinyYolov2Options.js.map","import { Point } from '../classes';\r\nexport var IOU_THRESHOLD = 0.4;\r\nexport var BOX_ANCHORS = [\r\n new Point(0.738768, 0.874946),\r\n new Point(2.42204, 2.65704),\r\n new Point(4.30971, 7.04493),\r\n new Point(10.246, 4.59428),\r\n new Point(12.6868, 11.8741)\r\n];\r\nexport var BOX_ANCHORS_SEPARABLE = [\r\n new Point(1.603231, 2.094468),\r\n new Point(6.041143, 7.080126),\r\n new Point(2.882459, 3.518061),\r\n new Point(4.266906, 5.178857),\r\n new Point(9.041765, 10.66308)\r\n];\r\nexport var MEAN_RGB_SEPARABLE = [117.001, 114.697, 97.404];\r\nexport var DEFAULT_MODEL_NAME = 'tiny_yolov2_model';\r\nexport var DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model';\r\n//# sourceMappingURL=const.js.map","var isNumber = function (arg) { return typeof arg === 'number'; };\r\nexport function validateConfig(config) {\r\n if (!config) {\r\n throw new Error(\"invalid config: \" + config);\r\n }\r\n if (typeof config.withSeparableConvs !== 'boolean') {\r\n throw new Error(\"config.withSeparableConvs has to be a boolean, have: \" + config.withSeparableConvs);\r\n }\r\n if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) {\r\n throw new Error(\"config.iouThreshold has to be a number between [0, 1], have: \" + config.iouThreshold);\r\n }\r\n if (!Array.isArray(config.classes)\r\n || !config.classes.length\r\n || !config.classes.every(function (c) { return typeof c === 'string'; })) {\r\n throw new Error(\"config.classes has to be an array class names: string[], have: \" + JSON.stringify(config.classes));\r\n }\r\n if (!Array.isArray(config.anchors)\r\n || !config.anchors.length\r\n || !config.anchors.map(function (a) { return a || {}; }).every(function (a) { return isNumber(a.x) && isNumber(a.y); })) {\r\n throw new Error(\"config.anchors has to be an array of { x: number, y: number }, have: \" + JSON.stringify(config.anchors));\r\n }\r\n if (config.meanRgb && (!Array.isArray(config.meanRgb)\r\n || config.meanRgb.length !== 3\r\n || !config.meanRgb.every(isNumber))) {\r\n throw new Error(\"config.meanRgb has to be an array of shape [number, number, number], have: \" + JSON.stringify(config.meanRgb));\r\n }\r\n}\r\n//# sourceMappingURL=config.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function leaky(x) {\r\n return tf.tidy(function () {\r\n var min = tf.mul(x, tf.scalar(0.10000000149011612));\r\n return tf.add(tf.relu(tf.sub(x, min)), min);\r\n //return tf.maximum(x, min)\r\n });\r\n}\r\n//# sourceMappingURL=leaky.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { leaky } from './leaky';\r\nexport function convWithBatchNorm(x, params) {\r\n return tf.tidy(function () {\r\n var out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]);\r\n out = tf.conv2d(out, params.conv.filters, [1, 1], 'valid');\r\n out = tf.sub(out, params.bn.sub);\r\n out = tf.mul(out, params.bn.truediv);\r\n out = tf.add(out, params.conv.bias);\r\n return leaky(out);\r\n });\r\n}\r\n//# sourceMappingURL=convWithBatchNorm.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { leaky } from './leaky';\r\nexport function depthwiseSeparableConv(x, params) {\r\n return tf.tidy(function () {\r\n var out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]);\r\n out = tf.separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid');\r\n out = tf.add(out, params.bias);\r\n return leaky(out);\r\n });\r\n}\r\n//# sourceMappingURL=depthwiseSeparableConv.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { extractConvParamsFactory } from '../common';\r\nimport { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\r\nimport { extractWeightsFactory } from '../common/extractWeightsFactory';\r\nfunction extractorsFactory(extractWeights, paramMappings) {\r\n var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\r\n function extractBatchNormParams(size, mappedPrefix) {\r\n var sub = tf.tensor1d(extractWeights(size));\r\n var truediv = tf.tensor1d(extractWeights(size));\r\n paramMappings.push({ paramPath: mappedPrefix + \"/sub\" }, { paramPath: mappedPrefix + \"/truediv\" });\r\n return { sub: sub, truediv: truediv };\r\n }\r\n function extractConvWithBatchNormParams(channelsIn, channelsOut, mappedPrefix) {\r\n var conv = extractConvParams(channelsIn, channelsOut, 3, mappedPrefix + \"/conv\");\r\n var bn = extractBatchNormParams(channelsOut, mappedPrefix + \"/bn\");\r\n return { conv: conv, bn: bn };\r\n }\r\n var extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\r\n return {\r\n extractConvParams: extractConvParams,\r\n extractConvWithBatchNormParams: extractConvWithBatchNormParams,\r\n extractSeparableConvParams: extractSeparableConvParams\r\n };\r\n}\r\nexport function extractParams(weights, config, boxEncodingSize, filterSizes) {\r\n var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;\r\n var paramMappings = [];\r\n var _b = extractorsFactory(extractWeights, paramMappings), extractConvParams = _b.extractConvParams, extractConvWithBatchNormParams = _b.extractConvWithBatchNormParams, extractSeparableConvParams = _b.extractSeparableConvParams;\r\n var params;\r\n if (config.withSeparableConvs) {\r\n var s0 = filterSizes[0], s1 = filterSizes[1], s2 = filterSizes[2], s3 = filterSizes[3], s4 = filterSizes[4], s5 = filterSizes[5], s6 = filterSizes[6], s7 = filterSizes[7], s8 = filterSizes[8];\r\n var conv0 = config.isFirstLayerConv2d\r\n ? extractConvParams(s0, s1, 3, 'conv0')\r\n : extractSeparableConvParams(s0, s1, 'conv0');\r\n var conv1 = extractSeparableConvParams(s1, s2, 'conv1');\r\n var conv2 = extractSeparableConvParams(s2, s3, 'conv2');\r\n var conv3 = extractSeparableConvParams(s3, s4, 'conv3');\r\n var conv4 = extractSeparableConvParams(s4, s5, 'conv4');\r\n var conv5 = extractSeparableConvParams(s5, s6, 'conv5');\r\n var conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined;\r\n var conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined;\r\n var conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8');\r\n params = { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3, conv4: conv4, conv5: conv5, conv6: conv6, conv7: conv7, conv8: conv8 };\r\n }\r\n else {\r\n var s0 = filterSizes[0], s1 = filterSizes[1], s2 = filterSizes[2], s3 = filterSizes[3], s4 = filterSizes[4], s5 = filterSizes[5], s6 = filterSizes[6], s7 = filterSizes[7], s8 = filterSizes[8];\r\n var conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0');\r\n var conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1');\r\n var conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2');\r\n var conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3');\r\n var conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4');\r\n var conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5');\r\n var conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6');\r\n var conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7');\r\n var conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8');\r\n params = { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3, conv4: conv4, conv5: conv5, conv6: conv6, conv7: conv7, conv8: conv8 };\r\n }\r\n if (getRemainingWeights().length !== 0) {\r\n throw new Error(\"weights remaing after extract: \" + getRemainingWeights().length);\r\n }\r\n return { params: params, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParams.js.map","import { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors';\r\nimport { loadSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\r\nimport { extractWeightEntryFactory } from '../common/extractWeightEntryFactory';\r\nfunction extractorsFactory(weightMap, paramMappings) {\r\n var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\r\n function extractBatchNormParams(prefix) {\r\n var sub = extractWeightEntry(prefix + \"/sub\", 1);\r\n var truediv = extractWeightEntry(prefix + \"/truediv\", 1);\r\n return { sub: sub, truediv: truediv };\r\n }\r\n function extractConvParams(prefix) {\r\n var filters = extractWeightEntry(prefix + \"/filters\", 4);\r\n var bias = extractWeightEntry(prefix + \"/bias\", 1);\r\n return { filters: filters, bias: bias };\r\n }\r\n function extractConvWithBatchNormParams(prefix) {\r\n var conv = extractConvParams(prefix + \"/conv\");\r\n var bn = extractBatchNormParams(prefix + \"/bn\");\r\n return { conv: conv, bn: bn };\r\n }\r\n var extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\r\n return {\r\n extractConvParams: extractConvParams,\r\n extractConvWithBatchNormParams: extractConvWithBatchNormParams,\r\n extractSeparableConvParams: extractSeparableConvParams\r\n };\r\n}\r\nexport function extractParamsFromWeigthMap(weightMap, config) {\r\n var paramMappings = [];\r\n var _a = extractorsFactory(weightMap, paramMappings), extractConvParams = _a.extractConvParams, extractConvWithBatchNormParams = _a.extractConvWithBatchNormParams, extractSeparableConvParams = _a.extractSeparableConvParams;\r\n var params;\r\n if (config.withSeparableConvs) {\r\n var numFilters = (config.filterSizes && config.filterSizes.length || 9);\r\n params = {\r\n conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'),\r\n conv1: extractSeparableConvParams('conv1'),\r\n conv2: extractSeparableConvParams('conv2'),\r\n conv3: extractSeparableConvParams('conv3'),\r\n conv4: extractSeparableConvParams('conv4'),\r\n conv5: extractSeparableConvParams('conv5'),\r\n conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined,\r\n conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined,\r\n conv8: extractConvParams('conv8')\r\n };\r\n }\r\n else {\r\n params = {\r\n conv0: extractConvWithBatchNormParams('conv0'),\r\n conv1: extractConvWithBatchNormParams('conv1'),\r\n conv2: extractConvWithBatchNormParams('conv2'),\r\n conv3: extractConvWithBatchNormParams('conv3'),\r\n conv4: extractConvWithBatchNormParams('conv4'),\r\n conv5: extractConvWithBatchNormParams('conv5'),\r\n conv6: extractConvWithBatchNormParams('conv6'),\r\n conv7: extractConvWithBatchNormParams('conv7'),\r\n conv8: extractConvParams('conv8')\r\n };\r\n }\r\n disposeUnusedWeightTensors(weightMap, paramMappings);\r\n return { params: params, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParamsFromWeigthMap.js.map","import { __assign, __awaiter, __extends, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { BoundingBox } from '../classes/BoundingBox';\r\nimport { ObjectDetection } from '../classes/ObjectDetection';\r\nimport { convLayer } from '../common';\r\nimport { toNetInput } from '../dom';\r\nimport { NeuralNetwork } from '../NeuralNetwork';\r\nimport { sigmoid } from '../ops';\r\nimport { nonMaxSuppression } from '../ops/nonMaxSuppression';\r\nimport { normalize } from '../ops/normalize';\r\nimport { validateConfig } from './config';\r\nimport { convWithBatchNorm } from './convWithBatchNorm';\r\nimport { depthwiseSeparableConv } from './depthwiseSeparableConv';\r\nimport { extractParams } from './extractParams';\r\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\r\nimport { leaky } from './leaky';\r\nimport { TinyYolov2Options } from './TinyYolov2Options';\r\nvar TinyYolov2Base = /** @class */ (function (_super) {\r\n __extends(TinyYolov2Base, _super);\r\n function TinyYolov2Base(config) {\r\n var _this = _super.call(this, 'TinyYolov2') || this;\r\n validateConfig(config);\r\n _this._config = config;\r\n return _this;\r\n }\r\n Object.defineProperty(TinyYolov2Base.prototype, \"config\", {\r\n get: function () {\r\n return this._config;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TinyYolov2Base.prototype, \"withClassScores\", {\r\n get: function () {\r\n return this.config.withClassScores || this.config.classes.length > 1;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TinyYolov2Base.prototype, \"boxEncodingSize\", {\r\n get: function () {\r\n return 5 + (this.withClassScores ? this.config.classes.length : 0);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TinyYolov2Base.prototype.runTinyYolov2 = function (x, params) {\r\n var out = convWithBatchNorm(x, params.conv0);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = convWithBatchNorm(out, params.conv1);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = convWithBatchNorm(out, params.conv2);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = convWithBatchNorm(out, params.conv3);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = convWithBatchNorm(out, params.conv4);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = convWithBatchNorm(out, params.conv5);\r\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\r\n out = convWithBatchNorm(out, params.conv6);\r\n out = convWithBatchNorm(out, params.conv7);\r\n return convLayer(out, params.conv8, 'valid', false);\r\n };\r\n TinyYolov2Base.prototype.runMobilenet = function (x, params) {\r\n var out = this.config.isFirstLayerConv2d\r\n ? leaky(convLayer(x, params.conv0, 'valid', false))\r\n : depthwiseSeparableConv(x, params.conv0);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = depthwiseSeparableConv(out, params.conv1);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = depthwiseSeparableConv(out, params.conv2);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = depthwiseSeparableConv(out, params.conv3);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = depthwiseSeparableConv(out, params.conv4);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = depthwiseSeparableConv(out, params.conv5);\r\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\r\n out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out;\r\n out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out;\r\n return convLayer(out, params.conv8, 'valid', false);\r\n };\r\n TinyYolov2Base.prototype.forwardInput = function (input, inputSize) {\r\n var _this = this;\r\n var params = this.params;\r\n if (!params) {\r\n throw new Error('TinyYolov2 - load model before inference');\r\n }\r\n return tf.tidy(function () {\r\n var batchTensor = input.toBatchTensor(inputSize, false).toFloat();\r\n batchTensor = _this.config.meanRgb\r\n ? normalize(batchTensor, _this.config.meanRgb)\r\n : batchTensor;\r\n batchTensor = batchTensor.div(tf.scalar(256));\r\n return _this.config.withSeparableConvs\r\n ? _this.runMobilenet(batchTensor, params)\r\n : _this.runTinyYolov2(batchTensor, params);\r\n });\r\n };\r\n TinyYolov2Base.prototype.forward = function (input, inputSize) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this.forwardInput;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1: return [4 /*yield*/, _a.apply(this, [_b.sent(), inputSize])];\r\n case 2: return [2 /*return*/, _b.sent()];\r\n }\r\n });\r\n });\r\n };\r\n TinyYolov2Base.prototype.detect = function (input, forwardParams) {\r\n if (forwardParams === void 0) { forwardParams = {}; }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, inputSize, scoreThreshold, netInput, out, out0, inputDimensions, results, boxes, scores, classScores, classNames, indices, detections;\r\n var _this = this;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = new TinyYolov2Options(forwardParams), inputSize = _a.inputSize, scoreThreshold = _a.scoreThreshold;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1:\r\n netInput = _b.sent();\r\n return [4 /*yield*/, this.forwardInput(netInput, inputSize)];\r\n case 2:\r\n out = _b.sent();\r\n out0 = tf.tidy(function () { return tf.unstack(out)[0].expandDims(); });\r\n inputDimensions = {\r\n width: netInput.getInputWidth(0),\r\n height: netInput.getInputHeight(0)\r\n };\r\n return [4 /*yield*/, this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold)];\r\n case 3:\r\n results = _b.sent();\r\n out.dispose();\r\n out0.dispose();\r\n boxes = results.map(function (res) { return res.box; });\r\n scores = results.map(function (res) { return res.score; });\r\n classScores = results.map(function (res) { return res.classScore; });\r\n classNames = results.map(function (res) { return _this.config.classes[res.label]; });\r\n indices = nonMaxSuppression(boxes.map(function (box) { return box.rescale(inputSize); }), scores, this.config.iouThreshold, true);\r\n detections = indices.map(function (idx) {\r\n return new ObjectDetection(scores[idx], classScores[idx], classNames[idx], boxes[idx], inputDimensions);\r\n });\r\n return [2 /*return*/, detections];\r\n }\r\n });\r\n });\r\n };\r\n TinyYolov2Base.prototype.getDefaultModelName = function () {\r\n return '';\r\n };\r\n TinyYolov2Base.prototype.extractParamsFromWeigthMap = function (weightMap) {\r\n return extractParamsFromWeigthMap(weightMap, this.config);\r\n };\r\n TinyYolov2Base.prototype.extractParams = function (weights) {\r\n var filterSizes = this.config.filterSizes || TinyYolov2Base.DEFAULT_FILTER_SIZES;\r\n var numFilters = filterSizes ? filterSizes.length : undefined;\r\n if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) {\r\n throw new Error(\"TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found \" + numFilters + \" filterSizes in config\");\r\n }\r\n return extractParams(weights, this.config, this.boxEncodingSize, filterSizes);\r\n };\r\n TinyYolov2Base.prototype.extractBoxes = function (outputTensor, inputBlobDimensions, scoreThreshold) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var width, height, inputSize, correctionFactorX, correctionFactorY, numCells, numBoxes, _a, boxesTensor, scoresTensor, classScoresTensor, results, scoresData, boxesData, row, col, anchor, score, ctX, ctY, width_1, height_1, x, y, pos, _b, classScore, label, _c;\r\n var _this = this;\r\n return __generator(this, function (_d) {\r\n switch (_d.label) {\r\n case 0:\r\n width = inputBlobDimensions.width, height = inputBlobDimensions.height;\r\n inputSize = Math.max(width, height);\r\n correctionFactorX = inputSize / width;\r\n correctionFactorY = inputSize / height;\r\n numCells = outputTensor.shape[1];\r\n numBoxes = this.config.anchors.length;\r\n _a = tf.tidy(function () {\r\n var reshaped = outputTensor.reshape([numCells, numCells, numBoxes, _this.boxEncodingSize]);\r\n var boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]);\r\n var scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]);\r\n var classScores = _this.withClassScores\r\n ? tf.softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, _this.config.classes.length]), 3)\r\n : tf.scalar(0);\r\n return [boxes, scores, classScores];\r\n }), boxesTensor = _a[0], scoresTensor = _a[1], classScoresTensor = _a[2];\r\n results = [];\r\n return [4 /*yield*/, scoresTensor.array()];\r\n case 1:\r\n scoresData = _d.sent();\r\n return [4 /*yield*/, boxesTensor.array()];\r\n case 2:\r\n boxesData = _d.sent();\r\n row = 0;\r\n _d.label = 3;\r\n case 3:\r\n if (!(row < numCells)) return [3 /*break*/, 12];\r\n col = 0;\r\n _d.label = 4;\r\n case 4:\r\n if (!(col < numCells)) return [3 /*break*/, 11];\r\n anchor = 0;\r\n _d.label = 5;\r\n case 5:\r\n if (!(anchor < numBoxes)) return [3 /*break*/, 10];\r\n score = sigmoid(scoresData[row][col][anchor][0]);\r\n if (!(!scoreThreshold || score > scoreThreshold)) return [3 /*break*/, 9];\r\n ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX;\r\n ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY;\r\n width_1 = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX;\r\n height_1 = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY;\r\n x = (ctX - (width_1 / 2));\r\n y = (ctY - (height_1 / 2));\r\n pos = { row: row, col: col, anchor: anchor };\r\n if (!this.withClassScores) return [3 /*break*/, 7];\r\n return [4 /*yield*/, this.extractPredictedClass(classScoresTensor, pos)];\r\n case 6:\r\n _c = _d.sent();\r\n return [3 /*break*/, 8];\r\n case 7:\r\n _c = { classScore: 1, label: 0 };\r\n _d.label = 8;\r\n case 8:\r\n _b = _c, classScore = _b.classScore, label = _b.label;\r\n results.push(__assign({ box: new BoundingBox(x, y, x + width_1, y + height_1), score: score, classScore: score * classScore, label: label }, pos));\r\n _d.label = 9;\r\n case 9:\r\n anchor++;\r\n return [3 /*break*/, 5];\r\n case 10:\r\n col++;\r\n return [3 /*break*/, 4];\r\n case 11:\r\n row++;\r\n return [3 /*break*/, 3];\r\n case 12:\r\n boxesTensor.dispose();\r\n scoresTensor.dispose();\r\n classScoresTensor.dispose();\r\n return [2 /*return*/, results];\r\n }\r\n });\r\n });\r\n };\r\n TinyYolov2Base.prototype.extractPredictedClass = function (classesTensor, pos) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var row, col, anchor, classesData;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n row = pos.row, col = pos.col, anchor = pos.anchor;\r\n return [4 /*yield*/, classesTensor.array()];\r\n case 1:\r\n classesData = _a.sent();\r\n return [2 /*return*/, Array(this.config.classes.length).fill(0)\r\n .map(function (_, i) { return classesData[row][col][anchor][i]; })\r\n .map(function (classScore, label) { return ({\r\n classScore: classScore,\r\n label: label\r\n }); })\r\n .reduce(function (max, curr) { return max.classScore > curr.classScore ? max : curr; })];\r\n }\r\n });\r\n });\r\n };\r\n TinyYolov2Base.DEFAULT_FILTER_SIZES = [\r\n 3, 16, 32, 64, 128, 256, 512, 1024, 1024\r\n ];\r\n return TinyYolov2Base;\r\n}(NeuralNetwork));\r\nexport { TinyYolov2Base };\r\n//# sourceMappingURL=TinyYolov2Base.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport { FaceDetection } from '../classes';\r\nimport { BOX_ANCHORS, BOX_ANCHORS_SEPARABLE, DEFAULT_MODEL_NAME, DEFAULT_MODEL_NAME_SEPARABLE_CONV, IOU_THRESHOLD, MEAN_RGB_SEPARABLE, } from './const';\r\nimport { TinyYolov2Base } from './TinyYolov2Base';\r\nvar TinyYolov2 = /** @class */ (function (_super) {\r\n __extends(TinyYolov2, _super);\r\n function TinyYolov2(withSeparableConvs) {\r\n if (withSeparableConvs === void 0) { withSeparableConvs = true; }\r\n var _this = this;\r\n var config = Object.assign({}, {\r\n withSeparableConvs: withSeparableConvs,\r\n iouThreshold: IOU_THRESHOLD,\r\n classes: ['face']\r\n }, withSeparableConvs\r\n ? {\r\n anchors: BOX_ANCHORS_SEPARABLE,\r\n meanRgb: MEAN_RGB_SEPARABLE\r\n }\r\n : {\r\n anchors: BOX_ANCHORS,\r\n withClassScores: true\r\n });\r\n _this = _super.call(this, config) || this;\r\n return _this;\r\n }\r\n Object.defineProperty(TinyYolov2.prototype, \"withSeparableConvs\", {\r\n get: function () {\r\n return this.config.withSeparableConvs;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TinyYolov2.prototype, \"anchors\", {\r\n get: function () {\r\n return this.config.anchors;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TinyYolov2.prototype.locateFaces = function (input, forwardParams) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var objectDetections;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.detect(input, forwardParams)];\r\n case 1:\r\n objectDetections = _a.sent();\r\n return [2 /*return*/, objectDetections.map(function (det) { return new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }); })];\r\n }\r\n });\r\n });\r\n };\r\n TinyYolov2.prototype.getDefaultModelName = function () {\r\n return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME;\r\n };\r\n TinyYolov2.prototype.extractParamsFromWeigthMap = function (weightMap) {\r\n return _super.prototype.extractParamsFromWeigthMap.call(this, weightMap);\r\n };\r\n return TinyYolov2;\r\n}(TinyYolov2Base));\r\nexport { TinyYolov2 };\r\n//# sourceMappingURL=TinyYolov2.js.map","import { __extends } from \"tslib\";\r\nimport { TinyYolov2Options } from '../tinyYolov2';\r\nvar TinyFaceDetectorOptions = /** @class */ (function (_super) {\r\n __extends(TinyFaceDetectorOptions, _super);\r\n function TinyFaceDetectorOptions() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this._name = 'TinyFaceDetectorOptions';\r\n return _this;\r\n }\r\n return TinyFaceDetectorOptions;\r\n}(TinyYolov2Options));\r\nexport { TinyFaceDetectorOptions };\r\n//# sourceMappingURL=TinyFaceDetectorOptions.js.map","import { __awaiter, __generator } from \"tslib\";\r\nvar ComposableTask = /** @class */ (function () {\r\n function ComposableTask() {\r\n }\r\n ComposableTask.prototype.then = function (onfulfilled) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = onfulfilled;\r\n return [4 /*yield*/, this.run()];\r\n case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])];\r\n }\r\n });\r\n });\r\n };\r\n ComposableTask.prototype.run = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n throw new Error('ComposableTask - run is not implemented');\r\n });\r\n });\r\n };\r\n return ComposableTask;\r\n}());\r\nexport { ComposableTask };\r\n//# sourceMappingURL=ComposableTask.js.map","import { __awaiter, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { extractFaces, extractFaceTensors } from '../dom';\r\nimport { isWithFaceLandmarks } from '../factories/WithFaceLandmarks';\r\nexport function extractAllFacesAndComputeResults(parentResults, input, computeResults, extractedFaces, getRectForAlignment) {\r\n if (getRectForAlignment === void 0) { getRectForAlignment = function (_a) {\r\n var alignedRect = _a.alignedRect;\r\n return alignedRect;\r\n }; }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var faceBoxes, faces, _a, _b, results;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n faceBoxes = parentResults.map(function (parentResult) {\r\n return isWithFaceLandmarks(parentResult)\r\n ? getRectForAlignment(parentResult)\r\n : parentResult.detection;\r\n });\r\n _a = extractedFaces;\r\n if (_a) return [3 /*break*/, 5];\r\n if (!(input instanceof tf.Tensor)) return [3 /*break*/, 2];\r\n return [4 /*yield*/, extractFaceTensors(input, faceBoxes)];\r\n case 1:\r\n _b = _c.sent();\r\n return [3 /*break*/, 4];\r\n case 2: return [4 /*yield*/, extractFaces(input, faceBoxes)];\r\n case 3:\r\n _b = _c.sent();\r\n _c.label = 4;\r\n case 4:\r\n _a = (_b);\r\n _c.label = 5;\r\n case 5:\r\n faces = _a;\r\n return [4 /*yield*/, computeResults(faces)];\r\n case 6:\r\n results = _c.sent();\r\n faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });\r\n return [2 /*return*/, results];\r\n }\r\n });\r\n });\r\n}\r\nexport function extractSingleFaceAndComputeResult(parentResult, input, computeResult, extractedFaces, getRectForAlignment) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n return [2 /*return*/, extractAllFacesAndComputeResults([parentResult], input, function (faces) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {\r\n return [2 /*return*/, computeResult(faces[0])];\r\n }); }); }, extractedFaces, getRectForAlignment)];\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=extractFacesAndComputeResults.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function bgrToRgbTensor(tensor) {\r\n return tf.tidy(function () { return tf.stack(tf.unstack(tensor, 3).reverse(), 3); });\r\n}\r\n//# sourceMappingURL=bgrToRgbTensor.js.map","export var CELL_STRIDE = 2;\r\nexport var CELL_SIZE = 12;\r\n//# sourceMappingURL=config.js.map","import { __assign } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { extractConvParamsFactory, extractFCParamsFactory, extractWeightsFactory, } from '../common';\r\nfunction extractorsFactory(extractWeights, paramMappings) {\r\n var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\r\n var extractFCParams = extractFCParamsFactory(extractWeights, paramMappings);\r\n function extractPReluParams(size, paramPath) {\r\n var alpha = tf.tensor1d(extractWeights(size));\r\n paramMappings.push({ paramPath: paramPath });\r\n return alpha;\r\n }\r\n function extractSharedParams(numFilters, mappedPrefix, isRnet) {\r\n if (isRnet === void 0) { isRnet = false; }\r\n var conv1 = extractConvParams(numFilters[0], numFilters[1], 3, mappedPrefix + \"/conv1\");\r\n var prelu1_alpha = extractPReluParams(numFilters[1], mappedPrefix + \"/prelu1_alpha\");\r\n var conv2 = extractConvParams(numFilters[1], numFilters[2], 3, mappedPrefix + \"/conv2\");\r\n var prelu2_alpha = extractPReluParams(numFilters[2], mappedPrefix + \"/prelu2_alpha\");\r\n var conv3 = extractConvParams(numFilters[2], numFilters[3], isRnet ? 2 : 3, mappedPrefix + \"/conv3\");\r\n var prelu3_alpha = extractPReluParams(numFilters[3], mappedPrefix + \"/prelu3_alpha\");\r\n return { conv1: conv1, prelu1_alpha: prelu1_alpha, conv2: conv2, prelu2_alpha: prelu2_alpha, conv3: conv3, prelu3_alpha: prelu3_alpha };\r\n }\r\n function extractPNetParams() {\r\n var sharedParams = extractSharedParams([3, 10, 16, 32], 'pnet');\r\n var conv4_1 = extractConvParams(32, 2, 1, 'pnet/conv4_1');\r\n var conv4_2 = extractConvParams(32, 4, 1, 'pnet/conv4_2');\r\n return __assign(__assign({}, sharedParams), { conv4_1: conv4_1, conv4_2: conv4_2 });\r\n }\r\n function extractRNetParams() {\r\n var sharedParams = extractSharedParams([3, 28, 48, 64], 'rnet', true);\r\n var fc1 = extractFCParams(576, 128, 'rnet/fc1');\r\n var prelu4_alpha = extractPReluParams(128, 'rnet/prelu4_alpha');\r\n var fc2_1 = extractFCParams(128, 2, 'rnet/fc2_1');\r\n var fc2_2 = extractFCParams(128, 4, 'rnet/fc2_2');\r\n return __assign(__assign({}, sharedParams), { fc1: fc1, prelu4_alpha: prelu4_alpha, fc2_1: fc2_1, fc2_2: fc2_2 });\r\n }\r\n function extractONetParams() {\r\n var sharedParams = extractSharedParams([3, 32, 64, 64], 'onet');\r\n var conv4 = extractConvParams(64, 128, 2, 'onet/conv4');\r\n var prelu4_alpha = extractPReluParams(128, 'onet/prelu4_alpha');\r\n var fc1 = extractFCParams(1152, 256, 'onet/fc1');\r\n var prelu5_alpha = extractPReluParams(256, 'onet/prelu5_alpha');\r\n var fc2_1 = extractFCParams(256, 2, 'onet/fc2_1');\r\n var fc2_2 = extractFCParams(256, 4, 'onet/fc2_2');\r\n var fc2_3 = extractFCParams(256, 10, 'onet/fc2_3');\r\n return __assign(__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 });\r\n }\r\n return {\r\n extractPNetParams: extractPNetParams,\r\n extractRNetParams: extractRNetParams,\r\n extractONetParams: extractONetParams\r\n };\r\n}\r\nexport function extractParams(weights) {\r\n var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;\r\n var paramMappings = [];\r\n var _b = extractorsFactory(extractWeights, paramMappings), extractPNetParams = _b.extractPNetParams, extractRNetParams = _b.extractRNetParams, extractONetParams = _b.extractONetParams;\r\n var pnet = extractPNetParams();\r\n var rnet = extractRNetParams();\r\n var onet = extractONetParams();\r\n if (getRemainingWeights().length !== 0) {\r\n throw new Error(\"weights remaing after extract: \" + getRemainingWeights().length);\r\n }\r\n return { params: { pnet: pnet, rnet: rnet, onet: onet }, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParams.js.map","import { __assign } from \"tslib\";\r\nimport { disposeUnusedWeightTensors, extractWeightEntryFactory } from '../common';\r\nfunction extractorsFactory(weightMap, paramMappings) {\r\n var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\r\n function extractConvParams(prefix) {\r\n var filters = extractWeightEntry(prefix + \"/weights\", 4, prefix + \"/filters\");\r\n var bias = extractWeightEntry(prefix + \"/bias\", 1);\r\n return { filters: filters, bias: bias };\r\n }\r\n function extractFCParams(prefix) {\r\n var weights = extractWeightEntry(prefix + \"/weights\", 2);\r\n var bias = extractWeightEntry(prefix + \"/bias\", 1);\r\n return { weights: weights, bias: bias };\r\n }\r\n function extractPReluParams(paramPath) {\r\n return extractWeightEntry(paramPath, 1);\r\n }\r\n function extractSharedParams(prefix) {\r\n var conv1 = extractConvParams(prefix + \"/conv1\");\r\n var prelu1_alpha = extractPReluParams(prefix + \"/prelu1_alpha\");\r\n var conv2 = extractConvParams(prefix + \"/conv2\");\r\n var prelu2_alpha = extractPReluParams(prefix + \"/prelu2_alpha\");\r\n var conv3 = extractConvParams(prefix + \"/conv3\");\r\n var prelu3_alpha = extractPReluParams(prefix + \"/prelu3_alpha\");\r\n return { conv1: conv1, prelu1_alpha: prelu1_alpha, conv2: conv2, prelu2_alpha: prelu2_alpha, conv3: conv3, prelu3_alpha: prelu3_alpha };\r\n }\r\n function extractPNetParams() {\r\n var sharedParams = extractSharedParams('pnet');\r\n var conv4_1 = extractConvParams('pnet/conv4_1');\r\n var conv4_2 = extractConvParams('pnet/conv4_2');\r\n return __assign(__assign({}, sharedParams), { conv4_1: conv4_1, conv4_2: conv4_2 });\r\n }\r\n function extractRNetParams() {\r\n var sharedParams = extractSharedParams('rnet');\r\n var fc1 = extractFCParams('rnet/fc1');\r\n var prelu4_alpha = extractPReluParams('rnet/prelu4_alpha');\r\n var fc2_1 = extractFCParams('rnet/fc2_1');\r\n var fc2_2 = extractFCParams('rnet/fc2_2');\r\n return __assign(__assign({}, sharedParams), { fc1: fc1, prelu4_alpha: prelu4_alpha, fc2_1: fc2_1, fc2_2: fc2_2 });\r\n }\r\n function extractONetParams() {\r\n var sharedParams = extractSharedParams('onet');\r\n var conv4 = extractConvParams('onet/conv4');\r\n var prelu4_alpha = extractPReluParams('onet/prelu4_alpha');\r\n var fc1 = extractFCParams('onet/fc1');\r\n var prelu5_alpha = extractPReluParams('onet/prelu5_alpha');\r\n var fc2_1 = extractFCParams('onet/fc2_1');\r\n var fc2_2 = extractFCParams('onet/fc2_2');\r\n var fc2_3 = extractFCParams('onet/fc2_3');\r\n return __assign(__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 });\r\n }\r\n return {\r\n extractPNetParams: extractPNetParams,\r\n extractRNetParams: extractRNetParams,\r\n extractONetParams: extractONetParams\r\n };\r\n}\r\nexport function extractParamsFromWeigthMap(weightMap) {\r\n var paramMappings = [];\r\n var _a = extractorsFactory(weightMap, paramMappings), extractPNetParams = _a.extractPNetParams, extractRNetParams = _a.extractRNetParams, extractONetParams = _a.extractONetParams;\r\n var pnet = extractPNetParams();\r\n var rnet = extractRNetParams();\r\n var onet = extractONetParams();\r\n disposeUnusedWeightTensors(weightMap, paramMappings);\r\n return { params: { pnet: pnet, rnet: rnet, onet: onet }, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParamsFromWeigthMap.js.map","export function getSizesForScale(scale, _a) {\r\n var height = _a[0], width = _a[1];\r\n return {\r\n height: Math.floor(height * scale),\r\n width: Math.floor(width * scale)\r\n };\r\n}\r\n//# sourceMappingURL=getSizesForScale.js.map","import { CELL_SIZE } from './config';\r\nexport function pyramidDown(minFaceSize, scaleFactor, dims) {\r\n var height = dims[0], width = dims[1];\r\n var m = CELL_SIZE / minFaceSize;\r\n var scales = [];\r\n var minLayer = Math.min(height, width) * m;\r\n var exp = 0;\r\n while (minLayer >= 12) {\r\n scales.push(m * Math.pow(scaleFactor, exp));\r\n minLayer = minLayer * scaleFactor;\r\n exp += 1;\r\n }\r\n return scales;\r\n}\r\n//# sourceMappingURL=pyramidDown.js.map","import { __extends } from \"tslib\";\r\nimport { Box } from '../classes';\r\nvar MtcnnBox = /** @class */ (function (_super) {\r\n __extends(MtcnnBox, _super);\r\n function MtcnnBox(left, top, right, bottom) {\r\n return _super.call(this, { left: left, top: top, right: right, bottom: bottom }, true) || this;\r\n }\r\n return MtcnnBox;\r\n}(Box));\r\nexport { MtcnnBox };\r\n//# sourceMappingURL=MtcnnBox.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function normalize(x) {\r\n return tf.tidy(function () { return tf.mul(tf.sub(x, tf.scalar(127.5)), tf.scalar(0.0078125)); });\r\n}\r\n//# sourceMappingURL=normalize.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function prelu(x, alpha) {\r\n return tf.tidy(function () {\r\n return tf.add(tf.relu(x), tf.mul(alpha, tf.neg(tf.relu(tf.neg(x)))));\r\n });\r\n}\r\n//# sourceMappingURL=prelu.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { convLayer } from '../common';\r\nimport { prelu } from './prelu';\r\nexport function sharedLayer(x, params, isPnet) {\r\n if (isPnet === void 0) { isPnet = false; }\r\n return tf.tidy(function () {\r\n var out = convLayer(x, params.conv1, 'valid');\r\n out = prelu(out, params.prelu1_alpha);\r\n out = tf.maxPool(out, isPnet ? [2, 2] : [3, 3], [2, 2], 'same');\r\n out = convLayer(out, params.conv2, 'valid');\r\n out = prelu(out, params.prelu2_alpha);\r\n out = isPnet ? out : tf.maxPool(out, [3, 3], [2, 2], 'valid');\r\n out = convLayer(out, params.conv3, 'valid');\r\n out = prelu(out, params.prelu3_alpha);\r\n return out;\r\n });\r\n}\r\n//# sourceMappingURL=sharedLayers.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { convLayer } from '../common';\r\nimport { sharedLayer } from './sharedLayers';\r\nexport function PNet(x, params) {\r\n return tf.tidy(function () {\r\n var out = sharedLayer(x, params, true);\r\n var conv = convLayer(out, params.conv4_1, 'valid');\r\n var max = tf.expandDims(tf.max(conv, 3), 3);\r\n var prob = tf.softmax(tf.sub(conv, max), 3);\r\n var regions = convLayer(out, params.conv4_2, 'valid');\r\n return { prob: prob, regions: regions };\r\n });\r\n}\r\n//# sourceMappingURL=PNet.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { BoundingBox, Point } from '../classes';\r\nimport { nonMaxSuppression } from '../ops';\r\nimport { CELL_SIZE, CELL_STRIDE } from './config';\r\nimport { getSizesForScale } from './getSizesForScale';\r\nimport { MtcnnBox } from './MtcnnBox';\r\nimport { normalize } from './normalize';\r\nimport { PNet } from './PNet';\r\nfunction rescaleAndNormalize(x, scale) {\r\n return tf.tidy(function () {\r\n var _a = getSizesForScale(scale, x.shape.slice(1)), height = _a.height, width = _a.width;\r\n var resized = tf.image.resizeBilinear(x, [height, width]);\r\n var normalized = normalize(resized);\r\n return tf.transpose(normalized, [0, 2, 1, 3]);\r\n });\r\n}\r\nfunction extractBoundingBoxes(scoresTensor, regionsTensor, scale, scoreThreshold) {\r\n // TODO: fix this!, maybe better to use tf.gather here\r\n var indices = [];\r\n var scoresData = scoresTensor.arraySync();\r\n for (var y = 0; y < scoresTensor.shape[0]; y++) {\r\n for (var x = 0; x < scoresTensor.shape[1]; x++) {\r\n if (scoresData[y][x] >= scoreThreshold) {\r\n indices.push(new Point(x, y));\r\n }\r\n }\r\n }\r\n var boundingBoxes = indices.map(function (idx) {\r\n 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));\r\n var score = scoresData[idx.y][idx.x];\r\n var regionsData = regionsTensor.arraySync();\r\n var region = new MtcnnBox(regionsData[idx.y][idx.x][0], regionsData[idx.y][idx.x][1], regionsData[idx.y][idx.x][2], regionsData[idx.y][idx.x][3]);\r\n return {\r\n cell: cell,\r\n score: score,\r\n region: region\r\n };\r\n });\r\n return boundingBoxes;\r\n}\r\nexport function stage1(imgTensor, scales, scoreThreshold, params, stats) {\r\n stats.stage1 = [];\r\n var pnetOutputs = scales.map(function (scale) { return tf.tidy(function () {\r\n var statsForScale = { scale: scale };\r\n var resized = rescaleAndNormalize(imgTensor, scale);\r\n var ts = Date.now();\r\n var _a = PNet(resized, params), prob = _a.prob, regions = _a.regions;\r\n statsForScale.pnet = Date.now() - ts;\r\n var scoresTensor = tf.unstack(tf.unstack(prob, 3)[1])[0];\r\n var regionsTensor = tf.unstack(regions)[0];\r\n return {\r\n scoresTensor: scoresTensor,\r\n regionsTensor: regionsTensor,\r\n scale: scale,\r\n statsForScale: statsForScale\r\n };\r\n }); });\r\n var boxesForScale = pnetOutputs.map(function (_a) {\r\n var scoresTensor = _a.scoresTensor, regionsTensor = _a.regionsTensor, scale = _a.scale, statsForScale = _a.statsForScale;\r\n var boundingBoxes = extractBoundingBoxes(scoresTensor, regionsTensor, scale, scoreThreshold);\r\n scoresTensor.dispose();\r\n regionsTensor.dispose();\r\n if (!boundingBoxes.length) {\r\n stats.stage1.push(statsForScale);\r\n return [];\r\n }\r\n var ts = Date.now();\r\n var indices = nonMaxSuppression(boundingBoxes.map(function (bbox) { return bbox.cell; }), boundingBoxes.map(function (bbox) { return bbox.score; }), 0.5);\r\n statsForScale.nms = Date.now() - ts;\r\n statsForScale.numBoxes = indices.length;\r\n stats.stage1.push(statsForScale);\r\n return indices.map(function (boxIdx) { return boundingBoxes[boxIdx]; });\r\n });\r\n var allBoxes = boxesForScale.reduce(function (all, boxes) { return all.concat(boxes); }, []);\r\n var finalBoxes = [];\r\n var finalScores = [];\r\n if (allBoxes.length > 0) {\r\n var ts = Date.now();\r\n var indices = nonMaxSuppression(allBoxes.map(function (bbox) { return bbox.cell; }), allBoxes.map(function (bbox) { return bbox.score; }), 0.7);\r\n stats.stage1_nms = Date.now() - ts;\r\n finalScores = indices.map(function (idx) { return allBoxes[idx].score; });\r\n finalBoxes = indices\r\n .map(function (idx) { return allBoxes[idx]; })\r\n .map(function (_a) {\r\n var cell = _a.cell, region = _a.region;\r\n 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();\r\n });\r\n }\r\n return {\r\n boxes: finalBoxes,\r\n scores: finalScores\r\n };\r\n}\r\n//# sourceMappingURL=stage1.js.map","import { __awaiter, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { createCanvas, createCanvasFromMedia, getContext2dOrThrow } from '../dom';\r\nimport { env } from '../env';\r\nimport { normalize } from './normalize';\r\nexport function extractImagePatches(img, boxes, _a) {\r\n var width = _a.width, height = _a.height;\r\n return __awaiter(this, void 0, void 0, function () {\r\n var imgCtx, bitmaps, imagePatchesDatas;\r\n var _this = this;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n imgCtx = getContext2dOrThrow(img);\r\n return [4 /*yield*/, Promise.all(boxes.map(function (box) { return __awaiter(_this, void 0, void 0, function () {\r\n var _a, y, ey, x, ex, fromX, fromY, imgData;\r\n return __generator(this, function (_b) {\r\n _a = box.padAtBorders(img.height, img.width), y = _a.y, ey = _a.ey, x = _a.x, ex = _a.ex;\r\n fromX = x - 1;\r\n fromY = y - 1;\r\n imgData = imgCtx.getImageData(fromX, fromY, (ex - fromX), (ey - fromY));\r\n return [2 /*return*/, env.isNodejs() ? createCanvasFromMedia(imgData) : createImageBitmap(imgData)];\r\n });\r\n }); }))];\r\n case 1:\r\n bitmaps = _b.sent();\r\n imagePatchesDatas = [];\r\n bitmaps.forEach(function (bmp) {\r\n var patch = createCanvas({ width: width, height: height });\r\n var patchCtx = getContext2dOrThrow(patch);\r\n patchCtx.drawImage(bmp, 0, 0, width, height);\r\n var data = patchCtx.getImageData(0, 0, width, height).data;\r\n var currData = [];\r\n // RGBA -> BGR\r\n for (var i = 0; i < data.length; i += 4) {\r\n currData.push(data[i + 2]);\r\n currData.push(data[i + 1]);\r\n currData.push(data[i]);\r\n }\r\n imagePatchesDatas.push(currData);\r\n });\r\n return [2 /*return*/, imagePatchesDatas.map(function (data) {\r\n var t = tf.tidy(function () {\r\n var imagePatchTensor = tf.transpose(tf.tensor4d(data, [1, width, height, 3]), [0, 2, 1, 3]).toFloat();\r\n return normalize(imagePatchTensor);\r\n });\r\n return t;\r\n })];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=extractImagePatches.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\r\nimport { prelu } from './prelu';\r\nimport { sharedLayer } from './sharedLayers';\r\nexport function RNet(x, params) {\r\n return tf.tidy(function () {\r\n var convOut = sharedLayer(x, params);\r\n var vectorized = tf.reshape(convOut, [convOut.shape[0], params.fc1.weights.shape[0]]);\r\n var fc1 = fullyConnectedLayer(vectorized, params.fc1);\r\n var prelu4 = prelu(fc1, params.prelu4_alpha);\r\n var fc2_1 = fullyConnectedLayer(prelu4, params.fc2_1);\r\n var max = tf.expandDims(tf.max(fc2_1, 1), 1);\r\n var prob = tf.softmax(tf.sub(fc2_1, max), 1);\r\n var regions = fullyConnectedLayer(prelu4, params.fc2_2);\r\n var scores = tf.unstack(prob, 1)[1];\r\n return { scores: scores, regions: regions };\r\n });\r\n}\r\n//# sourceMappingURL=RNet.js.map","import { __awaiter, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { nonMaxSuppression } from '../ops';\r\nimport { extractImagePatches } from './extractImagePatches';\r\nimport { MtcnnBox } from './MtcnnBox';\r\nimport { RNet } from './RNet';\r\nexport function stage2(img, inputBoxes, scoreThreshold, params, stats) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var ts, rnetInputs, rnetOuts, scoresTensor, scores, _a, _b, indices, filteredBoxes, filteredScores, finalBoxes, finalScores, indicesNms, regions_1;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n ts = Date.now();\r\n return [4 /*yield*/, extractImagePatches(img, inputBoxes, { width: 24, height: 24 })];\r\n case 1:\r\n rnetInputs = _c.sent();\r\n stats.stage2_extractImagePatches = Date.now() - ts;\r\n ts = Date.now();\r\n rnetOuts = rnetInputs.map(function (rnetInput) {\r\n var out = RNet(rnetInput, params);\r\n rnetInput.dispose();\r\n return out;\r\n });\r\n stats.stage2_rnet = Date.now() - ts;\r\n scoresTensor = rnetOuts.length > 1\r\n ? tf.concat(rnetOuts.map(function (out) { return out.scores; }))\r\n : rnetOuts[0].scores;\r\n _b = (_a = Array).from;\r\n return [4 /*yield*/, scoresTensor.data()];\r\n case 2:\r\n scores = _b.apply(_a, [_c.sent()]);\r\n scoresTensor.dispose();\r\n indices = scores\r\n .map(function (score, idx) { return ({ score: score, idx: idx }); })\r\n .filter(function (c) { return c.score > scoreThreshold; })\r\n .map(function (_a) {\r\n var idx = _a.idx;\r\n return idx;\r\n });\r\n filteredBoxes = indices.map(function (idx) { return inputBoxes[idx]; });\r\n filteredScores = indices.map(function (idx) { return scores[idx]; });\r\n finalBoxes = [];\r\n finalScores = [];\r\n if (filteredBoxes.length > 0) {\r\n ts = Date.now();\r\n indicesNms = nonMaxSuppression(filteredBoxes, filteredScores, 0.7);\r\n stats.stage2_nms = Date.now() - ts;\r\n regions_1 = indicesNms.map(function (idx) {\r\n var regionsData = rnetOuts[indices[idx]].regions.arraySync();\r\n return new MtcnnBox(regionsData[0][0], regionsData[0][1], regionsData[0][2], regionsData[0][3]);\r\n });\r\n finalScores = indicesNms.map(function (idx) { return filteredScores[idx]; });\r\n finalBoxes = indicesNms.map(function (idx, i) { return filteredBoxes[idx].calibrate(regions_1[i]); });\r\n }\r\n rnetOuts.forEach(function (t) {\r\n t.regions.dispose();\r\n t.scores.dispose();\r\n });\r\n return [2 /*return*/, {\r\n boxes: finalBoxes,\r\n scores: finalScores\r\n }];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=stage2.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { convLayer } from '../common';\r\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\r\nimport { prelu } from './prelu';\r\nimport { sharedLayer } from './sharedLayers';\r\nexport function ONet(x, params) {\r\n return tf.tidy(function () {\r\n var out = sharedLayer(x, params);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = convLayer(out, params.conv4, 'valid');\r\n out = prelu(out, params.prelu4_alpha);\r\n var vectorized = tf.reshape(out, [out.shape[0], params.fc1.weights.shape[0]]);\r\n var fc1 = fullyConnectedLayer(vectorized, params.fc1);\r\n var prelu5 = prelu(fc1, params.prelu5_alpha);\r\n var fc2_1 = fullyConnectedLayer(prelu5, params.fc2_1);\r\n var max = tf.expandDims(tf.max(fc2_1, 1), 1);\r\n var prob = tf.softmax(tf.sub(fc2_1, max), 1);\r\n var regions = fullyConnectedLayer(prelu5, params.fc2_2);\r\n var points = fullyConnectedLayer(prelu5, params.fc2_3);\r\n var scores = tf.unstack(prob, 1)[1];\r\n return { scores: scores, regions: regions, points: points };\r\n });\r\n}\r\n//# sourceMappingURL=ONet.js.map","import { __awaiter, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { Point } from '../classes';\r\nimport { nonMaxSuppression } from '../ops';\r\nimport { extractImagePatches } from './extractImagePatches';\r\nimport { MtcnnBox } from './MtcnnBox';\r\nimport { ONet } from './ONet';\r\nexport function stage3(img, inputBoxes, scoreThreshold, params, stats) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var ts, onetInputs, onetOuts, scoresTensor, scores, _a, _b, indices, filteredRegions, filteredBoxes, filteredScores, finalBoxes, finalScores, points, indicesNms;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n ts = Date.now();\r\n return [4 /*yield*/, extractImagePatches(img, inputBoxes, { width: 48, height: 48 })];\r\n case 1:\r\n onetInputs = _c.sent();\r\n stats.stage3_extractImagePatches = Date.now() - ts;\r\n ts = Date.now();\r\n onetOuts = onetInputs.map(function (onetInput) {\r\n var out = ONet(onetInput, params);\r\n onetInput.dispose();\r\n return out;\r\n });\r\n stats.stage3_onet = Date.now() - ts;\r\n scoresTensor = onetOuts.length > 1\r\n ? tf.concat(onetOuts.map(function (out) { return out.scores; }))\r\n : onetOuts[0].scores;\r\n _b = (_a = Array).from;\r\n return [4 /*yield*/, scoresTensor.data()];\r\n case 2:\r\n scores = _b.apply(_a, [_c.sent()]);\r\n scoresTensor.dispose();\r\n indices = scores\r\n .map(function (score, idx) { return ({ score: score, idx: idx }); })\r\n .filter(function (c) { return c.score > scoreThreshold; })\r\n .map(function (_a) {\r\n var idx = _a.idx;\r\n return idx;\r\n });\r\n filteredRegions = indices.map(function (idx) {\r\n var regionsData = onetOuts[idx].regions.arraySync();\r\n return new MtcnnBox(regionsData[0][0], regionsData[0][1], regionsData[0][2], regionsData[0][3]);\r\n });\r\n filteredBoxes = indices\r\n .map(function (idx, i) { return inputBoxes[idx].calibrate(filteredRegions[i]); });\r\n filteredScores = indices.map(function (idx) { return scores[idx]; });\r\n finalBoxes = [];\r\n finalScores = [];\r\n points = [];\r\n if (filteredBoxes.length > 0) {\r\n ts = Date.now();\r\n indicesNms = nonMaxSuppression(filteredBoxes, filteredScores, 0.7, false);\r\n stats.stage3_nms = Date.now() - ts;\r\n finalBoxes = indicesNms.map(function (idx) { return filteredBoxes[idx]; });\r\n finalScores = indicesNms.map(function (idx) { return filteredScores[idx]; });\r\n points = indicesNms.map(function (idx, i) {\r\n return Array(5).fill(0).map(function (_, ptIdx) {\r\n var pointsData = onetOuts[idx].points.arraySync();\r\n return new Point(((pointsData[0][ptIdx] * (finalBoxes[i].width + 1)) + finalBoxes[i].left), ((pointsData[0][ptIdx + 5] * (finalBoxes[i].height + 1)) + finalBoxes[i].top));\r\n });\r\n });\r\n }\r\n onetOuts.forEach(function (t) {\r\n t.regions.dispose();\r\n t.scores.dispose();\r\n t.points.dispose();\r\n });\r\n return [2 /*return*/, {\r\n boxes: finalBoxes,\r\n scores: finalScores,\r\n points: points\r\n }];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=stage3.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { Point, Rect } from '../classes';\r\nimport { FaceDetection } from '../classes/FaceDetection';\r\nimport { FaceLandmarks5 } from '../classes/FaceLandmarks5';\r\nimport { toNetInput } from '../dom';\r\nimport { extendWithFaceDetection, extendWithFaceLandmarks } from '../factories';\r\nimport { NeuralNetwork } from '../NeuralNetwork';\r\nimport { bgrToRgbTensor } from './bgrToRgbTensor';\r\nimport { CELL_SIZE } from './config';\r\nimport { extractParams } from './extractParams';\r\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\r\nimport { getSizesForScale } from './getSizesForScale';\r\nimport { MtcnnOptions } from './MtcnnOptions';\r\nimport { pyramidDown } from './pyramidDown';\r\nimport { stage1 } from './stage1';\r\nimport { stage2 } from './stage2';\r\nimport { stage3 } from './stage3';\r\nvar Mtcnn = /** @class */ (function (_super) {\r\n __extends(Mtcnn, _super);\r\n function Mtcnn() {\r\n return _super.call(this, 'Mtcnn') || this;\r\n }\r\n Mtcnn.prototype.load = function (weightsOrUrl) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n console.warn('mtcnn is deprecated and will be removed soon');\r\n return [2 /*return*/, _super.prototype.load.call(this, weightsOrUrl)];\r\n });\r\n });\r\n };\r\n Mtcnn.prototype.loadFromDisk = function (filePath) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n console.warn('mtcnn is deprecated and will be removed soon');\r\n return [2 /*return*/, _super.prototype.loadFromDisk.call(this, filePath)];\r\n });\r\n });\r\n };\r\n Mtcnn.prototype.forwardInput = function (input, forwardParams) {\r\n if (forwardParams === void 0) { forwardParams = {}; }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var params, inputCanvas, stats, tsTotal, imgTensor, onReturn, _a, height, width, _b, minFaceSize, scaleFactor, maxNumScales, scoreThresholds, scaleSteps, scales, ts, out1, out2, out3, results;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n params = this.params;\r\n if (!params) {\r\n throw new Error('Mtcnn - load model before inference');\r\n }\r\n inputCanvas = input.canvases[0];\r\n if (!inputCanvas) {\r\n throw new Error('Mtcnn - inputCanvas is not defined, note that passing tensors into Mtcnn.forwardInput is not supported yet.');\r\n }\r\n stats = {};\r\n tsTotal = Date.now();\r\n imgTensor = tf.tidy(function () {\r\n return bgrToRgbTensor(tf.expandDims(tf.browser.fromPixels(inputCanvas)).toFloat());\r\n });\r\n onReturn = function (results) {\r\n // dispose tensors on return\r\n imgTensor.dispose();\r\n stats.total = Date.now() - tsTotal;\r\n return results;\r\n };\r\n _a = imgTensor.shape.slice(1), height = _a[0], width = _a[1];\r\n _b = new MtcnnOptions(forwardParams), minFaceSize = _b.minFaceSize, scaleFactor = _b.scaleFactor, maxNumScales = _b.maxNumScales, scoreThresholds = _b.scoreThresholds, scaleSteps = _b.scaleSteps;\r\n scales = (scaleSteps || pyramidDown(minFaceSize, scaleFactor, [height, width]))\r\n .filter(function (scale) {\r\n var sizes = getSizesForScale(scale, [height, width]);\r\n return Math.min(sizes.width, sizes.height) > CELL_SIZE;\r\n })\r\n .slice(0, maxNumScales);\r\n stats.scales = scales;\r\n stats.pyramid = scales.map(function (scale) { return getSizesForScale(scale, [height, width]); });\r\n ts = Date.now();\r\n return [4 /*yield*/, stage1(imgTensor, scales, scoreThresholds[0], params.pnet, stats)];\r\n case 1:\r\n out1 = _c.sent();\r\n stats.total_stage1 = Date.now() - ts;\r\n if (!out1.boxes.length) {\r\n return [2 /*return*/, onReturn({ results: [], stats: stats })];\r\n }\r\n stats.stage2_numInputBoxes = out1.boxes.length;\r\n // using the inputCanvas to extract and resize the image patches, since it is faster\r\n // than doing this on the gpu\r\n ts = Date.now();\r\n return [4 /*yield*/, stage2(inputCanvas, out1.boxes, scoreThresholds[1], params.rnet, stats)];\r\n case 2:\r\n out2 = _c.sent();\r\n stats.total_stage2 = Date.now() - ts;\r\n if (!out2.boxes.length) {\r\n return [2 /*return*/, onReturn({ results: [], stats: stats })];\r\n }\r\n stats.stage3_numInputBoxes = out2.boxes.length;\r\n ts = Date.now();\r\n return [4 /*yield*/, stage3(inputCanvas, out2.boxes, scoreThresholds[2], params.onet, stats)];\r\n case 3:\r\n out3 = _c.sent();\r\n stats.total_stage3 = Date.now() - ts;\r\n results = out3.boxes.map(function (box, idx) { return extendWithFaceLandmarks(extendWithFaceDetection({}, new FaceDetection(out3.scores[idx], new Rect(box.left / width, box.top / height, box.width / width, box.height / height), {\r\n height: height,\r\n width: width\r\n })), 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 })); });\r\n return [2 /*return*/, onReturn({ results: results, stats: stats })];\r\n }\r\n });\r\n });\r\n };\r\n Mtcnn.prototype.forward = function (input, forwardParams) {\r\n if (forwardParams === void 0) { forwardParams = {}; }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this.forwardInput;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1: return [4 /*yield*/, _a.apply(this, [_b.sent(),\r\n forwardParams])];\r\n case 2: return [2 /*return*/, (_b.sent()).results];\r\n }\r\n });\r\n });\r\n };\r\n Mtcnn.prototype.forwardWithStats = function (input, forwardParams) {\r\n if (forwardParams === void 0) { forwardParams = {}; }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this.forwardInput;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1: return [2 /*return*/, _a.apply(this, [_b.sent(),\r\n forwardParams])];\r\n }\r\n });\r\n });\r\n };\r\n Mtcnn.prototype.getDefaultModelName = function () {\r\n return 'mtcnn_model';\r\n };\r\n Mtcnn.prototype.extractParamsFromWeigthMap = function (weightMap) {\r\n return extractParamsFromWeigthMap(weightMap);\r\n };\r\n Mtcnn.prototype.extractParams = function (weights) {\r\n return extractParams(weights);\r\n };\r\n return Mtcnn;\r\n}(NeuralNetwork));\r\nexport { Mtcnn };\r\n//# sourceMappingURL=Mtcnn.js.map","import { Point } from '../classes';\r\nexport var IOU_THRESHOLD = 0.4;\r\nexport var BOX_ANCHORS = [\r\n new Point(1.603231, 2.094468),\r\n new Point(6.041143, 7.080126),\r\n new Point(2.882459, 3.518061),\r\n new Point(4.266906, 5.178857),\r\n new Point(9.041765, 10.66308)\r\n];\r\nexport var MEAN_RGB = [117.001, 114.697, 97.404];\r\n//# sourceMappingURL=const.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport { FaceDetection } from '../classes';\r\nimport { TinyYolov2Base } from '../tinyYolov2/TinyYolov2Base';\r\nimport { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';\r\nvar TinyFaceDetector = /** @class */ (function (_super) {\r\n __extends(TinyFaceDetector, _super);\r\n function TinyFaceDetector() {\r\n var _this = this;\r\n var config = {\r\n withSeparableConvs: true,\r\n iouThreshold: IOU_THRESHOLD,\r\n classes: ['face'],\r\n anchors: BOX_ANCHORS,\r\n meanRgb: MEAN_RGB,\r\n isFirstLayerConv2d: true,\r\n filterSizes: [3, 16, 32, 64, 128, 256, 512]\r\n };\r\n _this = _super.call(this, config) || this;\r\n return _this;\r\n }\r\n Object.defineProperty(TinyFaceDetector.prototype, \"anchors\", {\r\n get: function () {\r\n return this.config.anchors;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TinyFaceDetector.prototype.locateFaces = function (input, forwardParams) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var objectDetections;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.detect(input, forwardParams)];\r\n case 1:\r\n objectDetections = _a.sent();\r\n return [2 /*return*/, objectDetections.map(function (det) { return new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }); })];\r\n }\r\n });\r\n });\r\n };\r\n TinyFaceDetector.prototype.getDefaultModelName = function () {\r\n return 'tiny_face_detector_model';\r\n };\r\n TinyFaceDetector.prototype.extractParamsFromWeigthMap = function (weightMap) {\r\n return _super.prototype.extractParamsFromWeigthMap.call(this, weightMap);\r\n };\r\n return TinyFaceDetector;\r\n}(TinyYolov2Base));\r\nexport { TinyFaceDetector };\r\n//# sourceMappingURL=TinyFaceDetector.js.map","import { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';\r\nimport { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';\r\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\r\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\r\nimport { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';\r\nimport { Mtcnn } from '../mtcnn/Mtcnn';\r\nimport { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';\r\nimport { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';\r\nimport { TinyYolov2 } from '../tinyYolov2';\r\nexport var nets = {\r\n ssdMobilenetv1: new SsdMobilenetv1(),\r\n tinyFaceDetector: new TinyFaceDetector(),\r\n tinyYolov2: new TinyYolov2(),\r\n mtcnn: new Mtcnn(),\r\n faceLandmark68Net: new FaceLandmark68Net(),\r\n faceLandmark68TinyNet: new FaceLandmark68TinyNet(),\r\n faceRecognitionNet: new FaceRecognitionNet(),\r\n faceExpressionNet: new FaceExpressionNet(),\r\n ageGenderNet: new AgeGenderNet()\r\n};\r\n/**\r\n * Attempts to detect all faces in an image using SSD Mobilenetv1 Network.\r\n *\r\n * @param input The input image.\r\n * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters).\r\n * @returns Bounding box of each face with score.\r\n */\r\nexport var ssdMobilenetv1 = function (input, options) {\r\n return nets.ssdMobilenetv1.locateFaces(input, options);\r\n};\r\n/**\r\n * Attempts to detect all faces in an image using the Tiny Face Detector.\r\n *\r\n * @param input The input image.\r\n * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters).\r\n * @returns Bounding box of each face with score.\r\n */\r\nexport var tinyFaceDetector = function (input, options) {\r\n return nets.tinyFaceDetector.locateFaces(input, options);\r\n};\r\n/**\r\n * Attempts to detect all faces in an image using the Tiny Yolov2 Network.\r\n *\r\n * @param input The input image.\r\n * @param options (optional, default: see TinyYolov2Options constructor for default parameters).\r\n * @returns Bounding box of each face with score.\r\n */\r\nexport var tinyYolov2 = function (input, options) {\r\n return nets.tinyYolov2.locateFaces(input, options);\r\n};\r\n/**\r\n * Attempts to detect all faces in an image and the 5 point face landmarks\r\n * of each detected face using the MTCNN Network.\r\n *\r\n * @param input The input image.\r\n * @param options (optional, default: see MtcnnOptions constructor for default parameters).\r\n * @returns Bounding box of each face with score and 5 point face landmarks.\r\n */\r\nexport var mtcnn = function (input, options) {\r\n return nets.mtcnn.forward(input, options);\r\n};\r\n/**\r\n * Detects the 68 point face landmark positions of the face shown in an image.\r\n *\r\n * @param inputs The face image extracted from the bounding box of a face. Can\r\n * also be an array of input images, which will be batch processed.\r\n * @returns 68 point face landmarks or array thereof in case of batch input.\r\n */\r\nexport var detectFaceLandmarks = function (input) {\r\n return nets.faceLandmark68Net.detectLandmarks(input);\r\n};\r\n/**\r\n * Detects the 68 point face landmark positions of the face shown in an image\r\n * using a tinier version of the 68 point face landmark model, which is slightly\r\n * faster at inference, but also slightly less accurate.\r\n *\r\n * @param inputs The face image extracted from the bounding box of a face. Can\r\n * also be an array of input images, which will be batch processed.\r\n * @returns 68 point face landmarks or array thereof in case of batch input.\r\n */\r\nexport var detectFaceLandmarksTiny = function (input) {\r\n return nets.faceLandmark68TinyNet.detectLandmarks(input);\r\n};\r\n/**\r\n * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image,\r\n * which uniquely represents the features of that persons face. The computed face descriptor can\r\n * be used to measure the similarity between faces, by computing the euclidean distance of two\r\n * face descriptors.\r\n *\r\n * @param inputs The face image extracted from the aligned bounding box of a face. Can\r\n * also be an array of input images, which will be batch processed.\r\n * @returns Face descriptor with 128 entries or array thereof in case of batch input.\r\n */\r\nexport var computeFaceDescriptor = function (input) {\r\n return nets.faceRecognitionNet.computeFaceDescriptor(input);\r\n};\r\n/**\r\n * Recognizes the facial expressions from a face image.\r\n *\r\n * @param inputs The face image extracted from the bounding box of a face. Can\r\n * also be an array of input images, which will be batch processed.\r\n * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.\r\n */\r\nexport var recognizeFaceExpressions = function (input) {\r\n return nets.faceExpressionNet.predictExpressions(input);\r\n};\r\n/**\r\n * Predicts age and gender from a face image.\r\n *\r\n * @param inputs The face image extracted from the bounding box of a face. Can\r\n * also be an array of input images, which will be batch processed.\r\n * @returns Predictions with age, gender and gender probability or array thereof in case of batch input.\r\n */\r\nexport var predictAgeAndGender = function (input) {\r\n return nets.ageGenderNet.predictAgeAndGender(input);\r\n};\r\nexport var loadSsdMobilenetv1Model = function (url) { return nets.ssdMobilenetv1.load(url); };\r\nexport var loadTinyFaceDetectorModel = function (url) { return nets.tinyFaceDetector.load(url); };\r\nexport var loadMtcnnModel = function (url) { return nets.mtcnn.load(url); };\r\nexport var loadTinyYolov2Model = function (url) { return nets.tinyYolov2.load(url); };\r\nexport var loadFaceLandmarkModel = function (url) { return nets.faceLandmark68Net.load(url); };\r\nexport var loadFaceLandmarkTinyModel = function (url) { return nets.faceLandmark68TinyNet.load(url); };\r\nexport var loadFaceRecognitionModel = function (url) { return nets.faceRecognitionNet.load(url); };\r\nexport var loadFaceExpressionModel = function (url) { return nets.faceExpressionNet.load(url); };\r\nexport var loadAgeGenderModel = function (url) { return nets.ageGenderNet.load(url); };\r\n// backward compatibility\r\nexport var loadFaceDetectionModel = loadSsdMobilenetv1Model;\r\nexport var locateFaces = ssdMobilenetv1;\r\nexport var detectLandmarks = detectFaceLandmarks;\r\n//# sourceMappingURL=nets.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport { extendWithFaceExpressions } from '../factories/WithFaceExpressions';\r\nimport { ComposableTask } from './ComposableTask';\r\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\r\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\r\nimport { nets } from './nets';\r\nimport { PredictAllAgeAndGenderTask, PredictAllAgeAndGenderWithFaceAlignmentTask, PredictSingleAgeAndGenderTask, PredictSingleAgeAndGenderWithFaceAlignmentTask, } from './PredictAgeAndGenderTask';\r\nvar PredictFaceExpressionsTaskBase = /** @class */ (function (_super) {\r\n __extends(PredictFaceExpressionsTaskBase, _super);\r\n function PredictFaceExpressionsTaskBase(parentTask, input, extractedFaces) {\r\n var _this = _super.call(this) || this;\r\n _this.parentTask = parentTask;\r\n _this.input = input;\r\n _this.extractedFaces = extractedFaces;\r\n return _this;\r\n }\r\n return PredictFaceExpressionsTaskBase;\r\n}(ComposableTask));\r\nexport { PredictFaceExpressionsTaskBase };\r\nvar PredictAllFaceExpressionsTask = /** @class */ (function (_super) {\r\n __extends(PredictAllFaceExpressionsTask, _super);\r\n function PredictAllFaceExpressionsTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n PredictAllFaceExpressionsTask.prototype.run = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var parentResults, faceExpressionsByFace;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.parentTask];\r\n case 1:\r\n parentResults = _a.sent();\r\n return [4 /*yield*/, extractAllFacesAndComputeResults(parentResults, this.input, function (faces) { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets.faceExpressionNet.predictExpressions(face); }))];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n }); }, this.extractedFaces)];\r\n case 2:\r\n faceExpressionsByFace = _a.sent();\r\n return [2 /*return*/, parentResults.map(function (parentResult, i) { return extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]); })];\r\n }\r\n });\r\n });\r\n };\r\n PredictAllFaceExpressionsTask.prototype.withAgeAndGender = function () {\r\n return new PredictAllAgeAndGenderTask(this, this.input);\r\n };\r\n return PredictAllFaceExpressionsTask;\r\n}(PredictFaceExpressionsTaskBase));\r\nexport { PredictAllFaceExpressionsTask };\r\nvar PredictSingleFaceExpressionsTask = /** @class */ (function (_super) {\r\n __extends(PredictSingleFaceExpressionsTask, _super);\r\n function PredictSingleFaceExpressionsTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n PredictSingleFaceExpressionsTask.prototype.run = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var parentResult, faceExpressions;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.parentTask];\r\n case 1:\r\n parentResult = _a.sent();\r\n if (!parentResult) {\r\n return [2 /*return*/];\r\n }\r\n return [4 /*yield*/, extractSingleFaceAndComputeResult(parentResult, this.input, function (face) { return nets.faceExpressionNet.predictExpressions(face); }, this.extractedFaces)];\r\n case 2:\r\n faceExpressions = _a.sent();\r\n return [2 /*return*/, extendWithFaceExpressions(parentResult, faceExpressions)];\r\n }\r\n });\r\n });\r\n };\r\n PredictSingleFaceExpressionsTask.prototype.withAgeAndGender = function () {\r\n return new PredictSingleAgeAndGenderTask(this, this.input);\r\n };\r\n return PredictSingleFaceExpressionsTask;\r\n}(PredictFaceExpressionsTaskBase));\r\nexport { PredictSingleFaceExpressionsTask };\r\nvar PredictAllFaceExpressionsWithFaceAlignmentTask = /** @class */ (function (_super) {\r\n __extends(PredictAllFaceExpressionsWithFaceAlignmentTask, _super);\r\n function PredictAllFaceExpressionsWithFaceAlignmentTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n PredictAllFaceExpressionsWithFaceAlignmentTask.prototype.withAgeAndGender = function () {\r\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\r\n };\r\n PredictAllFaceExpressionsWithFaceAlignmentTask.prototype.withFaceDescriptors = function () {\r\n return new ComputeAllFaceDescriptorsTask(this, this.input);\r\n };\r\n return PredictAllFaceExpressionsWithFaceAlignmentTask;\r\n}(PredictAllFaceExpressionsTask));\r\nexport { PredictAllFaceExpressionsWithFaceAlignmentTask };\r\nvar PredictSingleFaceExpressionsWithFaceAlignmentTask = /** @class */ (function (_super) {\r\n __extends(PredictSingleFaceExpressionsWithFaceAlignmentTask, _super);\r\n function PredictSingleFaceExpressionsWithFaceAlignmentTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n PredictSingleFaceExpressionsWithFaceAlignmentTask.prototype.withAgeAndGender = function () {\r\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\r\n };\r\n PredictSingleFaceExpressionsWithFaceAlignmentTask.prototype.withFaceDescriptor = function () {\r\n return new ComputeSingleFaceDescriptorTask(this, this.input);\r\n };\r\n return PredictSingleFaceExpressionsWithFaceAlignmentTask;\r\n}(PredictSingleFaceExpressionsTask));\r\nexport { PredictSingleFaceExpressionsWithFaceAlignmentTask };\r\n//# sourceMappingURL=PredictFaceExpressionsTask.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport { extendWithAge } from '../factories/WithAge';\r\nimport { extendWithGender } from '../factories/WithGender';\r\nimport { ComposableTask } from './ComposableTask';\r\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\r\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\r\nimport { nets } from './nets';\r\nimport { PredictAllFaceExpressionsTask, PredictAllFaceExpressionsWithFaceAlignmentTask, PredictSingleFaceExpressionsTask, PredictSingleFaceExpressionsWithFaceAlignmentTask, } from './PredictFaceExpressionsTask';\r\nvar PredictAgeAndGenderTaskBase = /** @class */ (function (_super) {\r\n __extends(PredictAgeAndGenderTaskBase, _super);\r\n function PredictAgeAndGenderTaskBase(parentTask, input, extractedFaces) {\r\n var _this = _super.call(this) || this;\r\n _this.parentTask = parentTask;\r\n _this.input = input;\r\n _this.extractedFaces = extractedFaces;\r\n return _this;\r\n }\r\n return PredictAgeAndGenderTaskBase;\r\n}(ComposableTask));\r\nexport { PredictAgeAndGenderTaskBase };\r\nvar PredictAllAgeAndGenderTask = /** @class */ (function (_super) {\r\n __extends(PredictAllAgeAndGenderTask, _super);\r\n function PredictAllAgeAndGenderTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n PredictAllAgeAndGenderTask.prototype.run = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var parentResults, ageAndGenderByFace;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.parentTask];\r\n case 1:\r\n parentResults = _a.sent();\r\n return [4 /*yield*/, extractAllFacesAndComputeResults(parentResults, this.input, function (faces) { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets.ageGenderNet.predictAgeAndGender(face); }))];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n }); }, this.extractedFaces)];\r\n case 2:\r\n ageAndGenderByFace = _a.sent();\r\n return [2 /*return*/, parentResults.map(function (parentResult, i) {\r\n var _a = ageAndGenderByFace[i], age = _a.age, gender = _a.gender, genderProbability = _a.genderProbability;\r\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age);\r\n })];\r\n }\r\n });\r\n });\r\n };\r\n PredictAllAgeAndGenderTask.prototype.withFaceExpressions = function () {\r\n return new PredictAllFaceExpressionsTask(this, this.input);\r\n };\r\n return PredictAllAgeAndGenderTask;\r\n}(PredictAgeAndGenderTaskBase));\r\nexport { PredictAllAgeAndGenderTask };\r\nvar PredictSingleAgeAndGenderTask = /** @class */ (function (_super) {\r\n __extends(PredictSingleAgeAndGenderTask, _super);\r\n function PredictSingleAgeAndGenderTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n PredictSingleAgeAndGenderTask.prototype.run = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var parentResult, _a, age, gender, genderProbability;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0: return [4 /*yield*/, this.parentTask];\r\n case 1:\r\n parentResult = _b.sent();\r\n if (!parentResult) {\r\n return [2 /*return*/];\r\n }\r\n return [4 /*yield*/, extractSingleFaceAndComputeResult(parentResult, this.input, function (face) { return nets.ageGenderNet.predictAgeAndGender(face); }, this.extractedFaces)];\r\n case 2:\r\n _a = _b.sent(), age = _a.age, gender = _a.gender, genderProbability = _a.genderProbability;\r\n return [2 /*return*/, extendWithAge(extendWithGender(parentResult, gender, genderProbability), age)];\r\n }\r\n });\r\n });\r\n };\r\n PredictSingleAgeAndGenderTask.prototype.withFaceExpressions = function () {\r\n return new PredictSingleFaceExpressionsTask(this, this.input);\r\n };\r\n return PredictSingleAgeAndGenderTask;\r\n}(PredictAgeAndGenderTaskBase));\r\nexport { PredictSingleAgeAndGenderTask };\r\nvar PredictAllAgeAndGenderWithFaceAlignmentTask = /** @class */ (function (_super) {\r\n __extends(PredictAllAgeAndGenderWithFaceAlignmentTask, _super);\r\n function PredictAllAgeAndGenderWithFaceAlignmentTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n PredictAllAgeAndGenderWithFaceAlignmentTask.prototype.withFaceExpressions = function () {\r\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\r\n };\r\n PredictAllAgeAndGenderWithFaceAlignmentTask.prototype.withFaceDescriptors = function () {\r\n return new ComputeAllFaceDescriptorsTask(this, this.input);\r\n };\r\n return PredictAllAgeAndGenderWithFaceAlignmentTask;\r\n}(PredictAllAgeAndGenderTask));\r\nexport { PredictAllAgeAndGenderWithFaceAlignmentTask };\r\nvar PredictSingleAgeAndGenderWithFaceAlignmentTask = /** @class */ (function (_super) {\r\n __extends(PredictSingleAgeAndGenderWithFaceAlignmentTask, _super);\r\n function PredictSingleAgeAndGenderWithFaceAlignmentTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n PredictSingleAgeAndGenderWithFaceAlignmentTask.prototype.withFaceExpressions = function () {\r\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\r\n };\r\n PredictSingleAgeAndGenderWithFaceAlignmentTask.prototype.withFaceDescriptor = function () {\r\n return new ComputeSingleFaceDescriptorTask(this, this.input);\r\n };\r\n return PredictSingleAgeAndGenderWithFaceAlignmentTask;\r\n}(PredictSingleAgeAndGenderTask));\r\nexport { PredictSingleAgeAndGenderWithFaceAlignmentTask };\r\n//# sourceMappingURL=PredictAgeAndGenderTask.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport { extendWithFaceDescriptor } from '../factories/WithFaceDescriptor';\r\nimport { ComposableTask } from './ComposableTask';\r\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\r\nimport { nets } from './nets';\r\nimport { PredictAllAgeAndGenderWithFaceAlignmentTask, PredictSingleAgeAndGenderWithFaceAlignmentTask, } from './PredictAgeAndGenderTask';\r\nimport { PredictAllFaceExpressionsWithFaceAlignmentTask, PredictSingleFaceExpressionsWithFaceAlignmentTask, } from './PredictFaceExpressionsTask';\r\nvar ComputeFaceDescriptorsTaskBase = /** @class */ (function (_super) {\r\n __extends(ComputeFaceDescriptorsTaskBase, _super);\r\n function ComputeFaceDescriptorsTaskBase(parentTask, input) {\r\n var _this = _super.call(this) || this;\r\n _this.parentTask = parentTask;\r\n _this.input = input;\r\n return _this;\r\n }\r\n return ComputeFaceDescriptorsTaskBase;\r\n}(ComposableTask));\r\nexport { ComputeFaceDescriptorsTaskBase };\r\nvar ComputeAllFaceDescriptorsTask = /** @class */ (function (_super) {\r\n __extends(ComputeAllFaceDescriptorsTask, _super);\r\n function ComputeAllFaceDescriptorsTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n ComputeAllFaceDescriptorsTask.prototype.run = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var parentResults, descriptors;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.parentTask];\r\n case 1:\r\n parentResults = _a.sent();\r\n return [4 /*yield*/, extractAllFacesAndComputeResults(parentResults, this.input, function (faces) { return Promise.all(faces.map(function (face) {\r\n return nets.faceRecognitionNet.computeFaceDescriptor(face);\r\n })); }, null, function (parentResult) { return parentResult.landmarks.align(null, { useDlibAlignment: true }); })];\r\n case 2:\r\n descriptors = _a.sent();\r\n return [2 /*return*/, descriptors.map(function (descriptor, i) { return extendWithFaceDescriptor(parentResults[i], descriptor); })];\r\n }\r\n });\r\n });\r\n };\r\n ComputeAllFaceDescriptorsTask.prototype.withFaceExpressions = function () {\r\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\r\n };\r\n ComputeAllFaceDescriptorsTask.prototype.withAgeAndGender = function () {\r\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\r\n };\r\n return ComputeAllFaceDescriptorsTask;\r\n}(ComputeFaceDescriptorsTaskBase));\r\nexport { ComputeAllFaceDescriptorsTask };\r\nvar ComputeSingleFaceDescriptorTask = /** @class */ (function (_super) {\r\n __extends(ComputeSingleFaceDescriptorTask, _super);\r\n function ComputeSingleFaceDescriptorTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n ComputeSingleFaceDescriptorTask.prototype.run = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var parentResult, descriptor;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.parentTask];\r\n case 1:\r\n parentResult = _a.sent();\r\n if (!parentResult) {\r\n return [2 /*return*/];\r\n }\r\n return [4 /*yield*/, extractSingleFaceAndComputeResult(parentResult, this.input, function (face) { return nets.faceRecognitionNet.computeFaceDescriptor(face); }, null, function (parentResult) { return parentResult.landmarks.align(null, { useDlibAlignment: true }); })];\r\n case 2:\r\n descriptor = _a.sent();\r\n return [2 /*return*/, extendWithFaceDescriptor(parentResult, descriptor)];\r\n }\r\n });\r\n });\r\n };\r\n ComputeSingleFaceDescriptorTask.prototype.withFaceExpressions = function () {\r\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\r\n };\r\n ComputeSingleFaceDescriptorTask.prototype.withAgeAndGender = function () {\r\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\r\n };\r\n return ComputeSingleFaceDescriptorTask;\r\n}(ComputeFaceDescriptorsTaskBase));\r\nexport { ComputeSingleFaceDescriptorTask };\r\n//# sourceMappingURL=ComputeFaceDescriptorsTasks.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { extractFaces, extractFaceTensors } from '../dom';\r\nimport { extendWithFaceLandmarks } from '../factories/WithFaceLandmarks';\r\nimport { ComposableTask } from './ComposableTask';\r\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\r\nimport { nets } from './nets';\r\nimport { PredictAllAgeAndGenderWithFaceAlignmentTask, PredictSingleAgeAndGenderWithFaceAlignmentTask, } from './PredictAgeAndGenderTask';\r\nimport { PredictAllFaceExpressionsWithFaceAlignmentTask, PredictSingleFaceExpressionsWithFaceAlignmentTask, } from './PredictFaceExpressionsTask';\r\nvar DetectFaceLandmarksTaskBase = /** @class */ (function (_super) {\r\n __extends(DetectFaceLandmarksTaskBase, _super);\r\n function DetectFaceLandmarksTaskBase(parentTask, input, useTinyLandmarkNet) {\r\n var _this = _super.call(this) || this;\r\n _this.parentTask = parentTask;\r\n _this.input = input;\r\n _this.useTinyLandmarkNet = useTinyLandmarkNet;\r\n return _this;\r\n }\r\n Object.defineProperty(DetectFaceLandmarksTaskBase.prototype, \"landmarkNet\", {\r\n get: function () {\r\n return this.useTinyLandmarkNet\r\n ? nets.faceLandmark68TinyNet\r\n : nets.faceLandmark68Net;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return DetectFaceLandmarksTaskBase;\r\n}(ComposableTask));\r\nexport { DetectFaceLandmarksTaskBase };\r\nvar DetectAllFaceLandmarksTask = /** @class */ (function (_super) {\r\n __extends(DetectAllFaceLandmarksTask, _super);\r\n function DetectAllFaceLandmarksTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n DetectAllFaceLandmarksTask.prototype.run = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var parentResults, detections, faces, _a, faceLandmarksByFace;\r\n var _this = this;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0: return [4 /*yield*/, this.parentTask];\r\n case 1:\r\n parentResults = _b.sent();\r\n detections = parentResults.map(function (res) { return res.detection; });\r\n if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3];\r\n return [4 /*yield*/, extractFaceTensors(this.input, detections)];\r\n case 2:\r\n _a = _b.sent();\r\n return [3 /*break*/, 5];\r\n case 3: return [4 /*yield*/, extractFaces(this.input, detections)];\r\n case 4:\r\n _a = _b.sent();\r\n _b.label = 5;\r\n case 5:\r\n faces = _a;\r\n return [4 /*yield*/, Promise.all(faces.map(function (face) { return _this.landmarkNet.detectLandmarks(face); }))];\r\n case 6:\r\n faceLandmarksByFace = _b.sent();\r\n faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });\r\n return [2 /*return*/, parentResults.map(function (parentResult, i) {\r\n return extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]);\r\n })];\r\n }\r\n });\r\n });\r\n };\r\n DetectAllFaceLandmarksTask.prototype.withFaceExpressions = function () {\r\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input);\r\n };\r\n DetectAllFaceLandmarksTask.prototype.withAgeAndGender = function () {\r\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input);\r\n };\r\n DetectAllFaceLandmarksTask.prototype.withFaceDescriptors = function () {\r\n return new ComputeAllFaceDescriptorsTask(this, this.input);\r\n };\r\n return DetectAllFaceLandmarksTask;\r\n}(DetectFaceLandmarksTaskBase));\r\nexport { DetectAllFaceLandmarksTask };\r\nvar DetectSingleFaceLandmarksTask = /** @class */ (function (_super) {\r\n __extends(DetectSingleFaceLandmarksTask, _super);\r\n function DetectSingleFaceLandmarksTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n DetectSingleFaceLandmarksTask.prototype.run = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var parentResult, detection, faces, _a, landmarks;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0: return [4 /*yield*/, this.parentTask];\r\n case 1:\r\n parentResult = _b.sent();\r\n if (!parentResult) {\r\n return [2 /*return*/];\r\n }\r\n detection = parentResult.detection;\r\n if (!(this.input instanceof tf.Tensor)) return [3 /*break*/, 3];\r\n return [4 /*yield*/, extractFaceTensors(this.input, [detection])];\r\n case 2:\r\n _a = _b.sent();\r\n return [3 /*break*/, 5];\r\n case 3: return [4 /*yield*/, extractFaces(this.input, [detection])];\r\n case 4:\r\n _a = _b.sent();\r\n _b.label = 5;\r\n case 5:\r\n faces = _a;\r\n return [4 /*yield*/, this.landmarkNet.detectLandmarks(faces[0])];\r\n case 6:\r\n landmarks = _b.sent();\r\n faces.forEach(function (f) { return f instanceof tf.Tensor && f.dispose(); });\r\n return [2 /*return*/, extendWithFaceLandmarks(parentResult, landmarks)];\r\n }\r\n });\r\n });\r\n };\r\n DetectSingleFaceLandmarksTask.prototype.withFaceExpressions = function () {\r\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input);\r\n };\r\n DetectSingleFaceLandmarksTask.prototype.withAgeAndGender = function () {\r\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input);\r\n };\r\n DetectSingleFaceLandmarksTask.prototype.withFaceDescriptor = function () {\r\n return new ComputeSingleFaceDescriptorTask(this, this.input);\r\n };\r\n return DetectSingleFaceLandmarksTask;\r\n}(DetectFaceLandmarksTaskBase));\r\nexport { DetectSingleFaceLandmarksTask };\r\n//# sourceMappingURL=DetectFaceLandmarksTasks.js.map","import { __awaiter, __extends, __generator } from \"tslib\";\r\nimport { extendWithFaceDetection } from '../factories/WithFaceDetection';\r\nimport { MtcnnOptions } from '../mtcnn/MtcnnOptions';\r\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\r\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\r\nimport { TinyYolov2Options } from '../tinyYolov2';\r\nimport { ComposableTask } from './ComposableTask';\r\nimport { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';\r\nimport { nets } from './nets';\r\nimport { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';\r\nimport { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';\r\nvar DetectFacesTaskBase = /** @class */ (function (_super) {\r\n __extends(DetectFacesTaskBase, _super);\r\n function DetectFacesTaskBase(input, options) {\r\n if (options === void 0) { options = new SsdMobilenetv1Options(); }\r\n var _this = _super.call(this) || this;\r\n _this.input = input;\r\n _this.options = options;\r\n return _this;\r\n }\r\n return DetectFacesTaskBase;\r\n}(ComposableTask));\r\nexport { DetectFacesTaskBase };\r\nvar DetectAllFacesTask = /** @class */ (function (_super) {\r\n __extends(DetectAllFacesTask, _super);\r\n function DetectAllFacesTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n DetectAllFacesTask.prototype.run = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, input, options, faceDetectionFunction;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this, input = _a.input, options = _a.options;\r\n if (!(options instanceof MtcnnOptions)) return [3 /*break*/, 2];\r\n return [4 /*yield*/, nets.mtcnn.forward(input, options)];\r\n case 1: return [2 /*return*/, (_b.sent())\r\n .map(function (result) { return result.detection; })];\r\n case 2:\r\n faceDetectionFunction = options instanceof TinyFaceDetectorOptions\r\n ? function (input) { return nets.tinyFaceDetector.locateFaces(input, options); }\r\n : (options instanceof SsdMobilenetv1Options\r\n ? function (input) { return nets.ssdMobilenetv1.locateFaces(input, options); }\r\n : (options instanceof TinyYolov2Options\r\n ? function (input) { return nets.tinyYolov2.locateFaces(input, options); }\r\n : null));\r\n if (!faceDetectionFunction) {\r\n throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options');\r\n }\r\n return [2 /*return*/, faceDetectionFunction(input)];\r\n }\r\n });\r\n });\r\n };\r\n DetectAllFacesTask.prototype.runAndExtendWithFaceDetections = function () {\r\n var _this = this;\r\n return new Promise(function (res) { return __awaiter(_this, void 0, void 0, function () {\r\n var detections;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.run()];\r\n case 1:\r\n detections = _a.sent();\r\n return [2 /*return*/, res(detections.map(function (detection) { return extendWithFaceDetection({}, detection); }))];\r\n }\r\n });\r\n }); });\r\n };\r\n DetectAllFacesTask.prototype.withFaceLandmarks = function (useTinyLandmarkNet) {\r\n if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; }\r\n return new DetectAllFaceLandmarksTask(this.runAndExtendWithFaceDetections(), this.input, useTinyLandmarkNet);\r\n };\r\n DetectAllFacesTask.prototype.withFaceExpressions = function () {\r\n return new PredictAllFaceExpressionsTask(this.runAndExtendWithFaceDetections(), this.input);\r\n };\r\n DetectAllFacesTask.prototype.withAgeAndGender = function () {\r\n return new PredictAllAgeAndGenderTask(this.runAndExtendWithFaceDetections(), this.input);\r\n };\r\n return DetectAllFacesTask;\r\n}(DetectFacesTaskBase));\r\nexport { DetectAllFacesTask };\r\nvar DetectSingleFaceTask = /** @class */ (function (_super) {\r\n __extends(DetectSingleFaceTask, _super);\r\n function DetectSingleFaceTask() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n DetectSingleFaceTask.prototype.run = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var faceDetections, faceDetectionWithHighestScore;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, new DetectAllFacesTask(this.input, this.options)];\r\n case 1:\r\n faceDetections = _a.sent();\r\n faceDetectionWithHighestScore = faceDetections[0];\r\n faceDetections.forEach(function (faceDetection) {\r\n if (faceDetection.score > faceDetectionWithHighestScore.score) {\r\n faceDetectionWithHighestScore = faceDetection;\r\n }\r\n });\r\n return [2 /*return*/, faceDetectionWithHighestScore];\r\n }\r\n });\r\n });\r\n };\r\n DetectSingleFaceTask.prototype.runAndExtendWithFaceDetection = function () {\r\n var _this = this;\r\n return new Promise(function (res) { return __awaiter(_this, void 0, void 0, function () {\r\n var detection;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.run()];\r\n case 1:\r\n detection = _a.sent();\r\n return [2 /*return*/, res(detection ? extendWithFaceDetection({}, detection) : undefined)];\r\n }\r\n });\r\n }); });\r\n };\r\n DetectSingleFaceTask.prototype.withFaceLandmarks = function (useTinyLandmarkNet) {\r\n if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; }\r\n return new DetectSingleFaceLandmarksTask(this.runAndExtendWithFaceDetection(), this.input, useTinyLandmarkNet);\r\n };\r\n DetectSingleFaceTask.prototype.withFaceExpressions = function () {\r\n return new PredictSingleFaceExpressionsTask(this.runAndExtendWithFaceDetection(), this.input);\r\n };\r\n DetectSingleFaceTask.prototype.withAgeAndGender = function () {\r\n return new PredictSingleAgeAndGenderTask(this.runAndExtendWithFaceDetection(), this.input);\r\n };\r\n return DetectSingleFaceTask;\r\n}(DetectFacesTaskBase));\r\nexport { DetectSingleFaceTask };\r\n//# sourceMappingURL=DetectFacesTasks.js.map","import { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\r\nimport { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';\r\nexport function detectSingleFace(input, options) {\r\n if (options === void 0) { options = new SsdMobilenetv1Options(); }\r\n return new DetectSingleFaceTask(input, options);\r\n}\r\nexport function detectAllFaces(input, options) {\r\n if (options === void 0) { options = new SsdMobilenetv1Options(); }\r\n return new DetectAllFacesTask(input, options);\r\n}\r\n//# sourceMappingURL=detectFaces.js.map","export function euclideanDistance(arr1, arr2) {\r\n if (arr1.length !== arr2.length)\r\n throw new Error('euclideanDistance: arr1.length !== arr2.length');\r\n var desc1 = Array.from(arr1);\r\n var desc2 = Array.from(arr2);\r\n return Math.sqrt(desc1\r\n .map(function (val, i) { return val - desc2[i]; })\r\n .reduce(function (res, diff) { return res + Math.pow(diff, 2); }, 0));\r\n}\r\n//# sourceMappingURL=euclideanDistance.js.map","import { FaceMatch } from '../classes/FaceMatch';\r\nimport { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors';\r\nimport { euclideanDistance } from '../euclideanDistance';\r\nvar FaceMatcher = /** @class */ (function () {\r\n function FaceMatcher(inputs, distanceThreshold) {\r\n if (distanceThreshold === void 0) { distanceThreshold = 0.6; }\r\n this._distanceThreshold = distanceThreshold;\r\n var inputArray = Array.isArray(inputs) ? inputs : [inputs];\r\n if (!inputArray.length) {\r\n throw new Error(\"FaceRecognizer.constructor - expected atleast one input\");\r\n }\r\n var count = 1;\r\n var createUniqueLabel = function () { return \"person \" + count++; };\r\n this._labeledDescriptors = inputArray.map(function (desc) {\r\n if (desc instanceof LabeledFaceDescriptors) {\r\n return desc;\r\n }\r\n if (desc instanceof Float32Array) {\r\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc]);\r\n }\r\n if (desc.descriptor && desc.descriptor instanceof Float32Array) {\r\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]);\r\n }\r\n throw new Error(\"FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>\");\r\n });\r\n }\r\n Object.defineProperty(FaceMatcher.prototype, \"labeledDescriptors\", {\r\n get: function () { return this._labeledDescriptors; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FaceMatcher.prototype, \"distanceThreshold\", {\r\n get: function () { return this._distanceThreshold; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n FaceMatcher.prototype.computeMeanDistance = function (queryDescriptor, descriptors) {\r\n return descriptors\r\n .map(function (d) { return euclideanDistance(d, queryDescriptor); })\r\n .reduce(function (d1, d2) { return d1 + d2; }, 0)\r\n / (descriptors.length || 1);\r\n };\r\n FaceMatcher.prototype.matchDescriptor = function (queryDescriptor) {\r\n var _this = this;\r\n return this.labeledDescriptors\r\n .map(function (_a) {\r\n var descriptors = _a.descriptors, label = _a.label;\r\n return new FaceMatch(label, _this.computeMeanDistance(queryDescriptor, descriptors));\r\n })\r\n .reduce(function (best, curr) { return best.distance < curr.distance ? best : curr; });\r\n };\r\n FaceMatcher.prototype.findBestMatch = function (queryDescriptor) {\r\n var bestMatch = this.matchDescriptor(queryDescriptor);\r\n return bestMatch.distance < this.distanceThreshold\r\n ? bestMatch\r\n : new FaceMatch('unknown', bestMatch.distance);\r\n };\r\n FaceMatcher.prototype.toJSON = function () {\r\n return {\r\n distanceThreshold: this.distanceThreshold,\r\n labeledDescriptors: this.labeledDescriptors.map(function (ld) { return ld.toJSON(); })\r\n };\r\n };\r\n FaceMatcher.fromJSON = function (json) {\r\n var labeledDescriptors = json.labeledDescriptors\r\n .map(function (ld) { return LabeledFaceDescriptors.fromJSON(ld); });\r\n return new FaceMatcher(labeledDescriptors, json.distanceThreshold);\r\n };\r\n return FaceMatcher;\r\n}());\r\nexport { FaceMatcher };\r\n//# sourceMappingURL=FaceMatcher.js.map","import { Dimensions } from './classes';\r\nimport { FaceDetection } from './classes/FaceDetection';\r\nimport { FaceLandmarks } from './classes/FaceLandmarks';\r\nimport { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';\r\nimport { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';\r\nexport function resizeResults(results, dimensions) {\r\n var _a = new Dimensions(dimensions.width, dimensions.height), width = _a.width, height = _a.height;\r\n if (width <= 0 || height <= 0) {\r\n throw new Error(\"resizeResults - invalid dimensions: \" + JSON.stringify({ width: width, height: height }));\r\n }\r\n if (Array.isArray(results)) {\r\n return results.map(function (obj) { return resizeResults(obj, { width: width, height: height }); });\r\n }\r\n if (isWithFaceLandmarks(results)) {\r\n var resizedDetection = results.detection.forSize(width, height);\r\n var resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height);\r\n return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks);\r\n }\r\n if (isWithFaceDetection(results)) {\r\n return extendWithFaceDetection(results, results.detection.forSize(width, height));\r\n }\r\n if (results instanceof FaceLandmarks || results instanceof FaceDetection) {\r\n return results.forSize(width, height);\r\n }\r\n return results;\r\n}\r\n//# sourceMappingURL=resizeResults.js.map","\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Facerecognition.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Facerecognition.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Facerecognition.vue?vue&type=template&id=6cc2f6f3&scoped=true\"\nimport script from \"./Facerecognition.vue?vue&type=script&lang=js\"\nexport * from \"./Facerecognition.vue?vue&type=script&lang=js\"\nimport style0 from \"./Facerecognition.vue?vue&type=style&index=0&id=6cc2f6f3&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6cc2f6f3\",\n null\n \n)\n\nexport default component.exports","'use strict';\nvar $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n if (passed < required) throw new $TypeError('Not enough arguments');\n return passed;\n};\n","export function createFileSystem(fs) {\r\n var requireFsError = '';\r\n if (!fs) {\r\n try {\r\n fs = require('fs');\r\n }\r\n catch (err) {\r\n requireFsError = err.toString();\r\n }\r\n }\r\n var readFile = fs\r\n ? function (filePath) {\r\n return new Promise(function (res, rej) {\r\n fs.readFile(filePath, function (err, buffer) {\r\n return err ? rej(err) : res(buffer);\r\n });\r\n });\r\n }\r\n : function () {\r\n throw new Error(\"readFile - failed to require fs in nodejs environment with error: \" + requireFsError);\r\n };\r\n return {\r\n readFile: readFile\r\n };\r\n}\r\n//# sourceMappingURL=createFileSystem.js.map"],"sourceRoot":""}