Socket
Socket
Sign inDemoInstall

@tensorflow-models/blazeface

Package Overview
Dependencies
308
Maintainers
6
Versions
8
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.1 to 0.0.2

2

dist/blazeface.esm.js

@@ -17,2 +17,2 @@ /**

*/
import{slice,add,div,sub,mul,concat2d,tensor2d,tensor1d,tidy,sigmoid,image,Tensor,browser}from"@tensorflow/tfjs-core";import{loadGraphModel}from"@tensorflow/tfjs-converter";const disposeBox=s=>{s.startEndTensor.dispose(),s.startPoint.dispose(),s.endPoint.dispose()},createBox=s=>({startEndTensor:s,startPoint:slice(s,[0,0],[-1,2]),endPoint:slice(s,[0,2],[-1,2])}),scaleBox=(s,e)=>{const t=mul(s.startPoint,e),o=mul(s.endPoint,e),i=concat2d([t,o],1);return createBox(i)},ANCHORS_CONFIG={strides:[8,16],anchors:[2,6]},NUM_LANDMARKS=6;function generateAnchors(s,e,t){const o=[];for(let i=0;i<t.strides.length;i++){const a=t.strides[i],r=Math.floor((e+a-1)/a),n=Math.floor((s+a-1)/a),d=t.anchors[i];for(let s=0;s<r;s++){const e=a*(s+.5);for(let s=0;s<n;s++){const t=a*(s+.5);for(let s=0;s<d;s++)o.push([t,e])}}}return o}function decodeBounds(s,e,t){const o=slice(s,[0,1],[-1,2]),i=add(o,e),a=slice(s,[0,3],[-1,2]),r=div(a,t),n=div(i,t),d=div(r,2),c=sub(n,d),l=add(n,d),h=mul(c,t),p=mul(l,t);return concat2d([h,p],1)}class BlazeFaceModel{constructor(s,e,t,o,i,a){this.blazeFaceModel=s,this.width=e,this.height=t,this.maxFaces=o,this.anchorsData=generateAnchors(e,t,ANCHORS_CONFIG),this.anchors=tensor2d(this.anchorsData),this.inputSizeData=[e,t],this.inputSize=tensor1d([e,t]),this.iouThreshold=i,this.scoreThreshold=a}async getBoundingBoxes(s,e){const[t,o,i]=tidy(()=>{const e=s.resizeBilinear([this.width,this.height]),t=mul(sub(e.div(255),.5),2),o=this.blazeFaceModel.predict(t).squeeze(),i=decodeBounds(o,this.anchors,this.inputSize),a=slice(o,[0,0],[-1,1]);return[o,i,sigmoid(a).squeeze()]}),a=image.nonMaxSuppression(o,i,this.maxFaces,this.iouThreshold,this.scoreThreshold),r=await a.array();a.dispose();let n=r.map(s=>slice(o,[s,0],[1,-1]));e||(n=await Promise.all(n.map(async s=>{const e=await s.array();return s.dispose(),e})));const d=s.shape[1],c=s.shape[2];let l;l=e?div([c,d],this.inputSize):[c/this.inputSizeData[0],d/this.inputSizeData[1]];const h=n.map((s,o)=>tidy(()=>{const a=r[o];let n;return n=e?this.anchors.slice([a,0],[1,2]):this.anchorsData[a],{box:createBox(s instanceof Tensor?s:tensor2d(s)),landmarks:slice(t,[a,NUM_LANDMARKS-1],[1,-1]).squeeze().reshape([NUM_LANDMARKS,-1]),probability:slice(i,[a],[1]),anchor:n}}));return o.dispose(),i.dispose(),t.dispose(),[h,l]}async estimateFaces(s,e=!1){const t=tidy(()=>(s instanceof Tensor||(s=browser.fromPixels(s)),s.toFloat().expandDims(0))),[o,i]=await this.getBoundingBoxes(t,e);return t.dispose(),e?o.map(s=>{const e=scaleBox(s.box,i).startEndTensor.squeeze();return{topLeft:e.slice([0],[2]),bottomRight:e.slice([2],[2]),landmarks:s.landmarks.add(s.anchor).mul(i),probability:s.probability}}):Promise.all(o.map(async s=>{const e=tidy(()=>scaleBox(s.box,i).startEndTensor.squeeze()),[t,o,a]=await Promise.all([s.landmarks,e,s.probability].map(async s=>s.array())),r=s.anchor,n=t.map(s=>[(s[0]+r[0])*i[0],(s[1]+r[1])*i[1]]);return e.dispose(),disposeBox(s.box),s.landmarks.dispose(),s.probability.dispose(),{topLeft:o.slice(0,2),bottomRight:o.slice(2),landmarks:n,probability:a}}))}}const BLAZEFACE_MODEL_URL="https://tfhub.dev/tensorflow/tfjs-model/blazeface/1/default/1";async function load({maxFaces:s=10,inputWidth:e=128,inputHeight:t=128,iouThreshold:o=.3,scoreThreshold:i=.75}={}){const a=await loadGraphModel(BLAZEFACE_MODEL_URL,{fromTFHub:!0});return new BlazeFaceModel(a,e,t,s,o,i)}export{load};
import{slice,add,div,sub,mul,concat2d,tensor2d,tensor1d,tidy,sigmoid,image,Tensor,browser}from"@tensorflow/tfjs-core";import{loadGraphModel}from"@tensorflow/tfjs-converter";const disposeBox=s=>{s.startEndTensor.dispose(),s.startPoint.dispose(),s.endPoint.dispose()},createBox=s=>({startEndTensor:s,startPoint:slice(s,[0,0],[-1,2]),endPoint:slice(s,[0,2],[-1,2])}),scaleBox=(s,e)=>{const t=mul(s.startPoint,e),o=mul(s.endPoint,e),i=concat2d([t,o],1);return createBox(i)},ANCHORS_CONFIG={strides:[8,16],anchors:[2,6]},NUM_LANDMARKS=6;function generateAnchors(s,e,t){const o=[];for(let i=0;i<t.strides.length;i++){const a=t.strides[i],r=Math.floor((e+a-1)/a),n=Math.floor((s+a-1)/a),d=t.anchors[i];for(let s=0;s<r;s++){const e=a*(s+.5);for(let s=0;s<n;s++){const t=a*(s+.5);for(let s=0;s<d;s++)o.push([t,e])}}}return o}function decodeBounds(s,e,t){const o=slice(s,[0,1],[-1,2]),i=add(o,e),a=slice(s,[0,3],[-1,2]),r=div(a,t),n=div(i,t),d=div(r,2),c=sub(n,d),l=add(n,d),h=mul(c,t),p=mul(l,t);return concat2d([h,p],1)}class BlazeFaceModel{constructor(s,e,t,o,i,a){this.blazeFaceModel=s,this.width=e,this.height=t,this.maxFaces=o,this.anchorsData=generateAnchors(e,t,ANCHORS_CONFIG),this.anchors=tensor2d(this.anchorsData),this.inputSizeData=[e,t],this.inputSize=tensor1d([e,t]),this.iouThreshold=i,this.scoreThreshold=a}async getBoundingBoxes(s,e){const[t,o,i]=tidy(()=>{const e=s.resizeBilinear([this.width,this.height]),t=mul(sub(e.div(255),.5),2),o=this.blazeFaceModel.predict(t).squeeze(),i=decodeBounds(o,this.anchors,this.inputSize),a=slice(o,[0,0],[-1,1]);return[o,i,sigmoid(a).squeeze()]}),a=await image.nonMaxSuppressionAsync(o,i,this.maxFaces,this.iouThreshold,this.scoreThreshold),r=await a.array();a.dispose();let n=r.map(s=>slice(o,[s,0],[1,-1]));e||(n=await Promise.all(n.map(async s=>{const e=await s.array();return s.dispose(),e})));const d=s.shape[1],c=s.shape[2];let l;l=e?div([c,d],this.inputSize):[c/this.inputSizeData[0],d/this.inputSizeData[1]];const h=n.map((s,o)=>tidy(()=>{const a=r[o];let n;return n=e?this.anchors.slice([a,0],[1,2]):this.anchorsData[a],{box:createBox(s instanceof Tensor?s:tensor2d(s)),landmarks:slice(t,[a,NUM_LANDMARKS-1],[1,-1]).squeeze().reshape([NUM_LANDMARKS,-1]),probability:slice(i,[a],[1]),anchor:n}}));return o.dispose(),i.dispose(),t.dispose(),[h,l]}async estimateFaces(s,e=!1){const t=tidy(()=>(s instanceof Tensor||(s=browser.fromPixels(s)),s.toFloat().expandDims(0))),[o,i]=await this.getBoundingBoxes(t,e);return t.dispose(),e?o.map(s=>{const e=scaleBox(s.box,i).startEndTensor.squeeze();return{topLeft:e.slice([0],[2]),bottomRight:e.slice([2],[2]),landmarks:s.landmarks.add(s.anchor).mul(i),probability:s.probability}}):Promise.all(o.map(async s=>{const e=tidy(()=>scaleBox(s.box,i).startEndTensor.squeeze()),[t,o,a]=await Promise.all([s.landmarks,e,s.probability].map(async s=>s.array())),r=s.anchor,n=t.map(s=>[(s[0]+r[0])*i[0],(s[1]+r[1])*i[1]]);return e.dispose(),disposeBox(s.box),s.landmarks.dispose(),s.probability.dispose(),{topLeft:o.slice(0,2),bottomRight:o.slice(2),landmarks:n,probability:a}}))}}const BLAZEFACE_MODEL_URL="https://tfhub.dev/tensorflow/tfjs-model/blazeface/1/default/1";async function load({maxFaces:s=10,inputWidth:e=128,inputHeight:t=128,iouThreshold:o=.3,scoreThreshold:i=.75}={}){const a=await loadGraphModel(BLAZEFACE_MODEL_URL,{fromTFHub:!0});return new BlazeFaceModel(a,e,t,s,o,i)}export{load};

@@ -101,3 +101,3 @@ /**

});
const boxIndicesTensor = tf.image.nonMaxSuppression(boxes, scores, this.maxFaces, this.iouThreshold, this.scoreThreshold);
const boxIndicesTensor = await tf.image.nonMaxSuppressionAsync(boxes, scores, this.maxFaces, this.iouThreshold, this.scoreThreshold);
const boxIndices = await boxIndicesTensor.array();

@@ -104,0 +104,0 @@ boxIndicesTensor.dispose();

@@ -17,2 +17,2 @@ /**

*/
!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?s(exports,require("@tensorflow/tfjs-core"),require("@tensorflow/tfjs-converter")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/tfjs-core","@tensorflow/tfjs-converter"],s):s(t.blazeface={},t.tf,t.tf)}(this,function(t,s,e){"use strict";const o=t=>{t.startEndTensor.dispose(),t.startPoint.dispose(),t.endPoint.dispose()},i=t=>({startEndTensor:t,startPoint:s.slice(t,[0,0],[-1,2]),endPoint:s.slice(t,[0,2],[-1,2])}),n=(t,e)=>{const o=s.mul(t.startPoint,e),n=s.mul(t.endPoint,e),a=s.concat2d([o,n],1);return i(a)},a={strides:[8,16],anchors:[2,6]},r=6;class c{constructor(t,e,o,i,n,r){this.blazeFaceModel=t,this.width=e,this.height=o,this.maxFaces=i,this.anchorsData=function(t,s,e){const o=[];for(let i=0;i<e.strides.length;i++){const n=e.strides[i],a=Math.floor((s+n-1)/n),r=Math.floor((t+n-1)/n),c=e.anchors[i];for(let t=0;t<a;t++){const s=n*(t+.5);for(let t=0;t<r;t++){const e=n*(t+.5);for(let t=0;t<c;t++)o.push([e,s])}}}return o}(e,o,a),this.anchors=s.tensor2d(this.anchorsData),this.inputSizeData=[e,o],this.inputSize=s.tensor1d([e,o]),this.iouThreshold=n,this.scoreThreshold=r}async getBoundingBoxes(t,e){const[o,n,a]=s.tidy(()=>{const e=t.resizeBilinear([this.width,this.height]),o=s.mul(s.sub(e.div(255),.5),2),i=this.blazeFaceModel.predict(o).squeeze(),n=function(t,e,o){const i=s.slice(t,[0,1],[-1,2]),n=s.add(i,e),a=s.slice(t,[0,3],[-1,2]),r=s.div(a,o),c=s.div(n,o),d=s.div(r,2),l=s.sub(c,d),h=s.add(c,d),u=s.mul(l,o),p=s.mul(h,o);return s.concat2d([u,p],1)}(i,this.anchors,this.inputSize),a=s.slice(i,[0,0],[-1,1]);return[i,n,s.sigmoid(a).squeeze()]}),c=s.image.nonMaxSuppression(n,a,this.maxFaces,this.iouThreshold,this.scoreThreshold),d=await c.array();c.dispose();let l=d.map(t=>s.slice(n,[t,0],[1,-1]));e||(l=await Promise.all(l.map(async t=>{const s=await t.array();return t.dispose(),s})));const h=t.shape[1],u=t.shape[2];let p;p=e?s.div([u,h],this.inputSize):[u/this.inputSizeData[0],h/this.inputSizeData[1]];const f=l.map((t,n)=>s.tidy(()=>{const c=d[n];let l;return l=e?this.anchors.slice([c,0],[1,2]):this.anchorsData[c],{box:t instanceof s.Tensor?i(t):i(s.tensor2d(t)),landmarks:s.slice(o,[c,r-1],[1,-1]).squeeze().reshape([r,-1]),probability:s.slice(a,[c],[1]),anchor:l}}));return n.dispose(),a.dispose(),o.dispose(),[f,p]}async estimateFaces(t,e=!1){const i=s.tidy(()=>(t instanceof s.Tensor||(t=s.browser.fromPixels(t)),t.toFloat().expandDims(0))),[a,r]=await this.getBoundingBoxes(i,e);return i.dispose(),e?a.map(t=>{const s=n(t.box,r).startEndTensor.squeeze();return{topLeft:s.slice([0],[2]),bottomRight:s.slice([2],[2]),landmarks:t.landmarks.add(t.anchor).mul(r),probability:t.probability}}):Promise.all(a.map(async t=>{const e=s.tidy(()=>n(t.box,r).startEndTensor.squeeze()),[i,a,c]=await Promise.all([t.landmarks,e,t.probability].map(async t=>t.array())),d=t.anchor,l=i.map(t=>[(t[0]+d[0])*r[0],(t[1]+d[1])*r[1]]);return e.dispose(),o(t.box),t.landmarks.dispose(),t.probability.dispose(),{topLeft:a.slice(0,2),bottomRight:a.slice(2),landmarks:l,probability:c}}))}}const d="https://tfhub.dev/tensorflow/tfjs-model/blazeface/1/default/1";t.load=async function({maxFaces:t=10,inputWidth:s=128,inputHeight:o=128,iouThreshold:i=.3,scoreThreshold:n=.75}={}){const a=await e.loadGraphModel(d,{fromTFHub:!0});return new c(a,s,o,t,i,n)},Object.defineProperty(t,"__esModule",{value:!0})});
!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?s(exports,require("@tensorflow/tfjs-core"),require("@tensorflow/tfjs-converter")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/tfjs-core","@tensorflow/tfjs-converter"],s):s(t.blazeface={},t.tf,t.tf)}(this,function(t,s,e){"use strict";const o=t=>{t.startEndTensor.dispose(),t.startPoint.dispose(),t.endPoint.dispose()},i=t=>({startEndTensor:t,startPoint:s.slice(t,[0,0],[-1,2]),endPoint:s.slice(t,[0,2],[-1,2])}),n=(t,e)=>{const o=s.mul(t.startPoint,e),n=s.mul(t.endPoint,e),a=s.concat2d([o,n],1);return i(a)},a={strides:[8,16],anchors:[2,6]},r=6;class c{constructor(t,e,o,i,n,r){this.blazeFaceModel=t,this.width=e,this.height=o,this.maxFaces=i,this.anchorsData=function(t,s,e){const o=[];for(let i=0;i<e.strides.length;i++){const n=e.strides[i],a=Math.floor((s+n-1)/n),r=Math.floor((t+n-1)/n),c=e.anchors[i];for(let t=0;t<a;t++){const s=n*(t+.5);for(let t=0;t<r;t++){const e=n*(t+.5);for(let t=0;t<c;t++)o.push([e,s])}}}return o}(e,o,a),this.anchors=s.tensor2d(this.anchorsData),this.inputSizeData=[e,o],this.inputSize=s.tensor1d([e,o]),this.iouThreshold=n,this.scoreThreshold=r}async getBoundingBoxes(t,e){const[o,n,a]=s.tidy(()=>{const e=t.resizeBilinear([this.width,this.height]),o=s.mul(s.sub(e.div(255),.5),2),i=this.blazeFaceModel.predict(o).squeeze(),n=function(t,e,o){const i=s.slice(t,[0,1],[-1,2]),n=s.add(i,e),a=s.slice(t,[0,3],[-1,2]),r=s.div(a,o),c=s.div(n,o),d=s.div(r,2),l=s.sub(c,d),h=s.add(c,d),u=s.mul(l,o),p=s.mul(h,o);return s.concat2d([u,p],1)}(i,this.anchors,this.inputSize),a=s.slice(i,[0,0],[-1,1]);return[i,n,s.sigmoid(a).squeeze()]}),c=await s.image.nonMaxSuppressionAsync(n,a,this.maxFaces,this.iouThreshold,this.scoreThreshold),d=await c.array();c.dispose();let l=d.map(t=>s.slice(n,[t,0],[1,-1]));e||(l=await Promise.all(l.map(async t=>{const s=await t.array();return t.dispose(),s})));const h=t.shape[1],u=t.shape[2];let p;p=e?s.div([u,h],this.inputSize):[u/this.inputSizeData[0],h/this.inputSizeData[1]];const f=l.map((t,n)=>s.tidy(()=>{const c=d[n];let l;return l=e?this.anchors.slice([c,0],[1,2]):this.anchorsData[c],{box:t instanceof s.Tensor?i(t):i(s.tensor2d(t)),landmarks:s.slice(o,[c,r-1],[1,-1]).squeeze().reshape([r,-1]),probability:s.slice(a,[c],[1]),anchor:l}}));return n.dispose(),a.dispose(),o.dispose(),[f,p]}async estimateFaces(t,e=!1){const i=s.tidy(()=>(t instanceof s.Tensor||(t=s.browser.fromPixels(t)),t.toFloat().expandDims(0))),[a,r]=await this.getBoundingBoxes(i,e);return i.dispose(),e?a.map(t=>{const s=n(t.box,r).startEndTensor.squeeze();return{topLeft:s.slice([0],[2]),bottomRight:s.slice([2],[2]),landmarks:t.landmarks.add(t.anchor).mul(r),probability:t.probability}}):Promise.all(a.map(async t=>{const e=s.tidy(()=>n(t.box,r).startEndTensor.squeeze()),[i,a,c]=await Promise.all([t.landmarks,e,t.probability].map(async t=>t.array())),d=t.anchor,l=i.map(t=>[(t[0]+d[0])*r[0],(t[1]+d[1])*r[1]]);return e.dispose(),o(t.box),t.landmarks.dispose(),t.probability.dispose(),{topLeft:a.slice(0,2),bottomRight:a.slice(2),landmarks:l,probability:c}}))}}const d="https://tfhub.dev/tensorflow/tfjs-model/blazeface/1/default/1";t.load=async function({maxFaces:t=10,inputWidth:s=128,inputHeight:o=128,iouThreshold:i=.3,scoreThreshold:n=.75}={}){const a=await e.loadGraphModel(d,{fromTFHub:!0});return new c(a,s,o,t,i,n)},Object.defineProperty(t,"__esModule",{value:!0})});

@@ -66,3 +66,3 @@ "use strict";

});
const boxIndicesTensor = tf.image.nonMaxSuppression(boxes, scores, this.maxFaces, this.iouThreshold, this.scoreThreshold);
const boxIndicesTensor = await tf.image.nonMaxSuppressionAsync(boxes, scores, this.maxFaces, this.iouThreshold, this.scoreThreshold);
const boxIndices = await boxIndicesTensor.array();

@@ -69,0 +69,0 @@ boxIndicesTensor.dispose();

@@ -1,2 +0,2 @@

declare const version = "0.0.1";
declare const version = "0.0.2";
export { version };
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const version = '0.0.1';
const version = '0.0.2';
exports.version = version;
//# sourceMappingURL=version.js.map
{
"name": "@tensorflow-models/blazeface",
"version": "0.0.1",
"version": "0.0.2",
"description": "Pretrained face detection model in TensorFlow.js",

@@ -5,0 +5,0 @@ "main": "dist/index.js",

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc