human/dist/human.esm-nobundle.js

3 lines
67 KiB
JavaScript
Raw Normal View History

2020-10-17 13:15:23 +02:00
var Ue=Object.defineProperty;var y=(e,t)=>()=>(t||(t={exports:{}},e(t.exports,t)),t.exports),B0=e=>Ue(e,"__esModule",{value:!0}),Ke=(e,t)=>{B0(e);for(var n in t)Ue(e,n,{get:t[n],enumerable:!0})};var Qe=y(se=>{const f=require("@tensorflow/tfjs"),Ye=6;function T0(e){const t={strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o<t.strides.length;o++){const i=t.strides[o],s=Math.floor((e+i-1)/i),r=Math.floor((e+i-1)/i),c=t.anchors[o];for(let a=0;a<s;a++){const d=i*(a+.5);for(let u=0;u<r;u++){const l=i*(u+.5);for(let h=0;h<c;h++)n.push([l,d])}}}return n}const Ge=e=>{e.startEndTensor.dispose(),e.startPoint.dispose(),e.endPoint.dispose()},Xe=e=>({startEndTensor:e,startPoint:f.slice(e,[0,0],[-1,2]),endPoint:f.slice(e,[0,2],[-1,2])}),k0=(e,t)=>{const n=f.mul(e.startPoint,t),o=f.mul(e.endPoint,t),i=f.concat2d([n,o],1);return Xe(i)};function _0(e,t,n){const o=f.slice(e,[0,1],[-1,2]),i=f.add(o,t),s=f.slice(e,[0,3],[-1,2]),r=f.div(s,n),c=f.div(i,n),a=f.div(r,2),d=f.sub(c,a),u=f.add(c,a),l=f.mul(d,n),h=f.mul(u,n),p=1;return f.concat2d([l,h],p)}function z0(e,t){return f.tidy(()=>{const n=e.box?e.box:e;return k0(n,t).startEndTensor.squeeze()})}class Ve{constructor(e,t){this.blazeFaceModel=e,this.width=t.detector.inputSize,this.height=t.detector.inputSize,this.maxFaces=t.detector.maxFaces,this.anchorsData=T0(t.detector.inputSize),this.anchors=f.tensor2d(this.anchorsData),this.inputSize=f.tensor1d([this.width,this.height]),this.iouThreshold=t.detector.iouThreshold,this.scaleFaces=.8,this.scoreThreshold=t.detector.scoreThreshold}async getBoundingBoxes(e){if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return null;const[t,n,o]=f.tidy(()=>{const a=e.resizeBilinear([this.width,this.height]),d=f.mul(f.sub(a.div(255),.5),2),u=this.blazeFaceModel.predict(d);let l;if(Array.isArray(u)){const w=u.sort((A,O)=>A.size-O.size),E=f.concat([w[0],w[2]],2),P=f.concat([w[1],w[3]],2),x=f.concat([P,E],1);l=x.squeeze(0)}else l=u.squeeze();const h=_0(l,this.anchors,this.inputSize),p=f.slice(l,[0,0],[-1,1]),m=f.sigmoid(p).squeeze();return[l,h,m]}),i=await f.image.nonMaxSuppressionAsync(n,o,this.maxFaces,this.iouThreshold,this.scoreThreshold),s=await i.array();i.dispose();let r=s.map(a=>f.slice(n,[a,0],[1,-1]));r=await Promise.all(r.map(async a=>{const d=await a.array();return a.dispose(),d}));const c=[];for(let a=0;a<r.length;a++){const d=r[a],u=f.tidy(()=>{const l=Xe(d),h=s[a],p=this.anchorsData[h],m=f.slice(t,[h,Ye-1],[1,-1]).squeeze().reshape([Ye,-1]),w=f.slice(o,[h],[1]);return{box:l,landmarks:m,probability:w,anchor:p}});c.push(u)}return n.dispose(),o.dispose(),t.dispose(),{boxes:c,scaleFactor:[e.shape[2]/this.width,e.shape[1]/this.height]}}async estimateFaces(e){const t=f.tidy(()=>(e instanceof f.Tensor||(e=f.browser.fromPixels(e)),e.toFloat().expandDims(0))),{boxes:n,scaleFactor:o}=await this.getBoundingBoxes(t);return t.dispose(),Promise.all(n.map(async i=>{const s=z0(i,o),[r,c,a]=await Promise.all([i.landmarks,s,i.probability].map(async m=>m.array())),d=i.anchor,[u,l]=o,h=r.map(m=>[(m[0]+d[0])*u,(m[1]+d[1])*l]),p={topLeft:c.slice(0,2),bottomRight:c.slice(2),landmarks:h,probability:a};return Ge(i.box),i.landmarks.dispose(),i.probability.dispose(),s.dispose(),p}))}}async function A0(e){const t=await f.loadGraphModel(e.detector.modelPath,{fromTFHub:e.detector.modelPath.includes("tfhub.dev")}),n=new Ve(t,e);return n}se.load=A0;se.BlazeFaceModel=Ve;se.disposeBox=Ge});var fe=y(pe=>{pe.MESH_ANNOTATIONS={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[61,185,40,39,37,0,267,269,270,409,291],lipsLowerOuter:[146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[78,191,80,81,82,13,312,311,310,415,308],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232
2020-10-15 14:16:34 +02:00
//# sourceMappingURL=human.esm-nobundle.js.map