/** * @license * Copyright 2021 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@tensorflow/tfjs-core"),require("@tensorflow/tfjs-converter")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/tfjs-core","@tensorflow/tfjs-converter"],e):e(t.bodyPix={},t.tf,t.tf)}(this,function(t,e,n){"use strict";var r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function o(t,e){function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}var i=function(){return(i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]n?n:t}function b(t,e){return{x:t.x+e.x,y:t.y+e.y}}function x(t,e,n){void 0===n&&(n=.3);for(var r=0,o=0,i=0;in&&(o+=1,r+=Math.pow(t[i].x-e.keypoints[i].position.x,2)+Math.pow(t[i].y-e.keypoints[i].position.y,2));return 0===o?r=1/0:r/=o,r}function S(t,e,n,r,o,i,a){for(var s=a[0],u=a[1],f=n(t),d=f.y*r+f.x,l=o[p*(2*d)+e],c=o[p*(2*d+1)+e],h=t.y+l,m=t.x+c,g=0;g "+d+") {\n numKpt = numKpt + 1;\n curDistSum = curDistSum + dist(x, y, poseX, poseY);\n }\n }\n if (numKpt > 0 && curDistSum / float(numKpt) < minDist) {\n minDist = curDistSum / float(numKpt);\n iMin = i;\n }\n }\n return iMin;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int nearestPose = findNearestPose(coords[0], coords[1]);\n setOutput(float(nearestPose));\n }\n "};return e.backend().compileAndRun(D,[t,S,T])}function _(){return"webgl"===e.getBackend()}function O(t,n,r,o,i,u,f,d,l,c,h,p){var m=f[0],v=f[1];return void 0===l&&(l=.2),void 0===c&&(c=8),void 0===h&&(h=.3),void 0===p&&(p=10),a(this,void 0,void 0,function(){var a,f,w,y,b;return s(this,function(s){switch(s.label){case 0:return a=r.filter(function(t){return t.score>=l}),_()?(w=e.tidy(function(){var r=E(t,n,a,o,i,u,[m,v],d,c,h,p),s=e.engine().makeTensorFromDataId(r.dataId,r.shape,r.dtype);return a.map(function(t,n){return function(t,n){return e.tidy(function(){return e.cast(e.equal(t,e.scalar(n)),"int32")})}(s,n)})}),[4,Promise.all(w.map(function(t){return t.data()}))]):[3,2];case 1:return f=s.sent(),w.forEach(function(t){return t.dispose()}),[3,5];case 2:return[4,t.data()];case 3:return y=s.sent(),[4,n.data()];case 4:b=s.sent(),f=function(t,e,n,r,o,i,a,s,u,f){var d=a[0],l=a[1];void 0===f&&(f=5);for(var c=n.map(function(t){return new Uint8Array(r*o).fill(0)}),h=s.top,p=s.left,m=g([r,o],[d,l],s),v=m[0],w=m[1],y=M([d,l],i)[0],b=0;b=0&&(c[E][S]=1)}}return c}(y,b,a,o,i,u,[m,v],d,c),s.label=5;case 5:return[2,f.map(function(t,e){return{data:t,pose:a[e],width:i,height:o}})]}})})}function P(t,n,r,o,i,u,f,d,l,c,h,p,m){var v=d[0],w=d[1];return void 0===c&&(c=.2),void 0===h&&(h=8),void 0===p&&(p=.3),void 0===m&&(m=10),a(this,void 0,void 0,function(){var a,d,y,b,x,S;return s(this,function(s){switch(s.label){case 0:return a=o.filter(function(t){return t.score>=c}),_()?(y=e.tidy(function(){var o=E(t,n,a,i,u,f,[v,w],l,h,p,m),s=e.engine().makeTensorFromDataId(o.dataId,o.shape,o.dtype);return a.map(function(t,n){return function(t,n,r){return e.tidy(function(){return e.sub(e.mul(e.cast(e.equal(t,e.scalar(r)),"int32"),e.add(n,1)),1)})}(s,r,n)})}),[4,Promise.all(y.map(function(t){return t.data()}))]):[3,2];case 1:return d=s.sent(),y.forEach(function(t){return t.dispose()}),[3,6];case 2:return[4,t.data()];case 3:return b=s.sent(),[4,n.data()];case 4:return x=s.sent(),[4,r.data()];case 5:S=s.sent(),d=function(t,e,n,r,o,i,a,s,u,f,d){var l=s[0],c=s[1];void 0===d&&(d=5);for(var h=r.map(function(t){return new Int32Array(o*i).fill(-1)}),p=u.top,m=u.left,v=g([o,i],[l,c],u),w=v[0],y=v[1],b=M([l,c],a)[0],x=0;x=0&&(h[_][E]=n[E])}}return h}(b,x,S,a,i,u,f,[v,w],l,h),s.label=6;case 6:return[2,d.map(function(t,e){return{pose:a[e],data:t,height:i,width:u}})]}})})}function A(t){return Math.floor(t/2)}var I=function(){function t(t,e){this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=e}return t.prototype.enqueue=function(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)},t.prototype.dequeue=function(){var t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t},t.prototype.empty=function(){return-1===this.numberOfElements},t.prototype.size=function(){return this.numberOfElements+1},t.prototype.all=function(){return this.priorityQueue.slice(0,this.numberOfElements+1)},t.prototype.max=function(){return this.priorityQueue[0]},t.prototype.swim=function(t){for(;t>0&&this.less(A(t),t);)this.exchange(t,A(t)),t=A(t)},t.prototype.sink=function(t){for(;2*t<=this.numberOfElements;){var e=2*t;if(ee){f=!1;break}if(!f)break}return f}var H=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]].map(function(t){var e=t[0],n=t[1];return[m[e],m[n]]}),T=H.map(function(t){return t[1]}),B=H.map(function(t){return t[0]});function F(t,e,n,r){return{y:y(Math.round(t.y/e),0,n-1),x:y(Math.round(t.x/e),0,r-1)}}function D(t,e,n,r,o,i,a,s){void 0===s&&(s=2);for(var u=r.shape,f=u[0],d=u[1],l=function(t,e,n){var r=n.shape[2]/2;return{y:n.get(e.y,e.x,t),x:n.get(e.y,e.x,r+t)}}(t,F(e.position,i,f,d),a),c=b(e.position,l),p=0;p=0;--c){var p=T[c],m=B[c];u[p]&&!u[m]&&(u[m]=D(c,u[p],m,e,n,r,i))}for(c=0;c=J,function(){return"inputResolution must be a string or number between "+J+" and "+Z+", but was "+t}),t}(t);return[X(o*a,n),X(i*a,n)]}function tt(t,n,r,o,i){var a=n[0],s=n[1],u=r[0],f=r[1],d=o[0],l=d[0],c=d[1],h=o[1],p=h[0],m=h[1];return void 0===i&&(i=!1),e.tidy(function(){var n=e.image.resizeBilinear(t,[u,f],!0);return i&&(n=e.sigmoid(n)),function(t,n,r){var o=n[0],i=n[1],a=r[0],s=a[0],u=a[1],f=r[1],d=f[0],l=f[1];return e.tidy(function(){var n=e.expandDims(t);return e.squeeze(e.image.cropAndResize(n,[[s/(o+s+u-1),d/(i+d+l-1),(s+o-1)/(o+s+u-1),(d+i-1)/(i+d+l-1)]],[0],[o,i]),[0])})}(n,[a,s],[[l,c],[p,m]])})}function et(t,n){var r=n[0],o=n[1],i=U(t),a=i[0],s=i[1],u=o/r,f=[0,0,0,0],d=f[0],l=f[1],c=f[2],h=f[3];return s/a1)throw new Error("segmentationThreshold "+e+". Should be in range [0.0, 1.0]");if(n<=0)throw new Error("Invalid maxDetections "+n+". Should be > 0");if(r<0||r>1)throw new Error("Invalid scoreThreshold "+r+". Should be in range [0.0, 1.0]");if(o<=0)throw new Error("Invalid nmsRadius "+o+".")}function ht(t){var e=t.segmentationThreshold,n=t.maxDetections,r=t.scoreThreshold,o=t.nmsRadius,i=t.minKeypointScore,a=t.refineSteps;if(e<0||e>1)throw new Error("segmentationThreshold "+e+". Should be in range [0.0, 1.0]");if(n<=0)throw new Error("Invalid maxDetections "+n+". Should be > 0");if(r<0||r>1)throw new Error("Invalid scoreThreshold "+r+". Should be in range [0.0, 1.0]");if(o<=0)throw new Error("Invalid nmsRadius "+o+".");if(i<0||i>1)throw new Error("Invalid minKeypointScore "+i+".Should be in range [0.0, 1.0]");if(a<=0||a>20)throw new Error("Invalid refineSteps "+a+".Should be in range [1, 20]")}var pt=function(){function t(t){this.baseModel=t}return t.prototype.predictForPersonSegmentation=function(t){var e=this.baseModel.predict(t);return{segmentLogits:e.segmentation,heatmapScores:e.heatmapScores,offsets:e.offsets,displacementFwd:e.displacementFwd,displacementBwd:e.displacementBwd}},t.prototype.predictForPersonSegmentationAndPart=function(t){var e=this.baseModel.predict(t);return{segmentLogits:e.segmentation,partHeatmapLogits:e.partHeatmaps,heatmapScores:e.heatmapScores,offsets:e.offsets,displacementFwd:e.displacementFwd,displacementBwd:e.displacementBwd}},t.prototype.predictForMultiPersonInstanceSegmentationAndPart=function(t){var e=this.baseModel.predict(t);return{segmentLogits:e.segmentation,longOffsets:e.longOffsets,heatmapScores:e.heatmapScores,offsets:e.offsets,displacementFwd:e.displacementFwd,displacementBwd:e.displacementBwd,partHeatmaps:e.partHeatmaps}},t.prototype.segmentPersonActivation=function(t,n,r){var o=this;void 0===r&&(r=.5);var i=U(t),a=i[0],s=i[1],u=$(n,this.baseModel.outputStride,[a,s]),d=et(t,u),l=d.resized,c=d.padding,h=e.tidy(function(){var t=o.predictForPersonSegmentation(l),n=t.segmentLogits,i=t.heatmapScores,u=t.offsets,d=t.displacementFwd,h=t.displacementBwd,p=l.shape,m=p[0],g=p[1],v=tt(n,[a,s],[m,g],[[c.top,c.bottom],[c.left,c.right]],!0);return{segmentation:f(e.squeeze(v),r),heatmapScores:i,offsets:u,displacementFwd:d,displacementBwd:h}}),p=h.segmentation,m=h.heatmapScores,g=h.offsets,v=h.displacementFwd,w=h.displacementBwd;return l.dispose(),{segmentation:p,heatmapScores:m,offsets:g,displacementFwd:v,displacementBwd:w,padding:c,internalResolutionHeightAndWidth:u}},t.prototype.segmentPerson=function(t,e){return void 0===e&&(e=dt),a(this,void 0,void 0,function(){var n,r,o,a,u,f,d,l,c,h,p,m,g,v,w,y,b,x;return s(this,function(s){switch(s.label){case 0:return ct(e=i(i({},dt),e)),n=this.segmentPersonActivation(t,e.internalResolution,e.segmentationThreshold),r=n.segmentation,o=n.heatmapScores,a=n.offsets,u=n.displacementFwd,f=n.displacementBwd,d=n.padding,l=n.internalResolutionHeightAndWidth,c=r.shape,h=c[0],p=c[1],[4,r.data()];case 1:return m=s.sent(),r.dispose(),[4,nt([o,a,u,f])];case 2:return g=s.sent(),v=g[0],w=g[1],y=g[2],b=g[3],x=ot(x=z(v,w,y,b,this.baseModel.outputStride,e.maxDetections,e.scoreThreshold,e.nmsRadius),[h,p],l,d,!1),o.dispose(),a.dispose(),u.dispose(),f.dispose(),[2,{height:h,width:p,data:m,allPoses:x}]}})})},t.prototype.segmentMultiPerson=function(t,n){return void 0===n&&(n=lt),a(this,void 0,void 0,function(){var r,o,a,u,d,l,c,h,p,m,g,v,w,y,b,x,S,k,M,E,_,P=this;return s(this,function(s){switch(s.label){case 0:return ht(n=i(i({},lt),n)),r=U(t),o=r[0],a=r[1],u=$(n.internalResolution,this.baseModel.outputStride,[o,a]),d=et(t,u),l=d.resized,c=d.padding,h=e.tidy(function(){var t,r=P.predictForMultiPersonInstanceSegmentationAndPart(l),i=r.segmentLogits,s=r.longOffsets,d=r.heatmapScores,h=r.offsets,p=r.displacementFwd,m=r.displacementBwd,g=tt(i,[o,a],u,[[c.top,c.bottom],[c.left,c.right]],!0);return t=s,{segmentation:f(e.squeeze(g),n.segmentationThreshold),longOffsets:t,heatmapScoresRaw:d,offsetsRaw:h,displacementFwdRaw:p,displacementBwdRaw:m}}),p=h.segmentation,m=h.longOffsets,g=h.heatmapScoresRaw,v=h.offsetsRaw,w=h.displacementFwdRaw,y=h.displacementBwdRaw,[4,nt([g,v,w,y])];case 1:return b=s.sent(),x=b[0],S=b[1],k=b[2],M=b[3],E=ot(E=z(x,S,k,M,this.baseModel.outputStride,n.maxDetections,n.scoreThreshold,n.nmsRadius),[o,a],u,c,!1),[4,O(p,m,E,o,a,this.baseModel.outputStride,u,c,n.scoreThreshold,n.refineSteps,n.minKeypointScore,n.maxDetections)];case 2:return _=s.sent(),l.dispose(),p.dispose(),m.dispose(),g.dispose(),v.dispose(),w.dispose(),y.dispose(),[2,_]}})})},t.prototype.segmentPersonPartsActivation=function(t,n,r){var o=this;void 0===r&&(r=.5);var i=U(t),a=i[0],s=i[1],u=$(n,this.baseModel.outputStride,[a,s]),l=et(t,u),c=l.resized,h=l.padding,p=e.tidy(function(){var t=o.predictForPersonSegmentationAndPart(c),n=t.segmentLogits,i=t.partHeatmapLogits,u=t.heatmapScores,l=t.offsets,p=t.displacementFwd,m=t.displacementBwd,g=c.shape,v=g[0],w=g[1],y=tt(n,[a,s],[v,w],[[h.top,h.bottom],[h.left,h.right]],!0),b=tt(i,[a,s],[v,w],[[h.top,h.bottom],[h.left,h.right]],!0);return{partSegmentation:d(f(e.squeeze(y),r),b),heatmapScores:u,offsets:l,displacementFwd:p,displacementBwd:m}}),m=p.partSegmentation,g=p.heatmapScores,v=p.offsets,w=p.displacementFwd,y=p.displacementBwd;return c.dispose(),{partSegmentation:m,heatmapScores:g,offsets:v,displacementFwd:w,displacementBwd:y,padding:h,internalResolutionHeightAndWidth:u}},t.prototype.segmentPersonParts=function(t,e){return void 0===e&&(e=dt),a(this,void 0,void 0,function(){var n,r,o,a,u,f,d,l,c,h,p,m,g,v,w,y,b,x;return s(this,function(s){switch(s.label){case 0:return ct(e=i(i({},dt),e)),n=this.segmentPersonPartsActivation(t,e.internalResolution,e.segmentationThreshold),r=n.partSegmentation,o=n.heatmapScores,a=n.offsets,u=n.displacementFwd,f=n.displacementBwd,d=n.padding,l=n.internalResolutionHeightAndWidth,c=r.shape,h=c[0],p=c[1],[4,r.data()];case 1:return m=s.sent(),r.dispose(),[4,nt([o,a,u,f])];case 2:return g=s.sent(),v=g[0],w=g[1],y=g[2],b=g[3],x=ot(x=z(v,w,y,b,this.baseModel.outputStride,e.maxDetections,e.scoreThreshold,e.nmsRadius),[h,p],l,d,!1),o.dispose(),a.dispose(),u.dispose(),f.dispose(),[2,{height:h,width:p,data:m,allPoses:x}]}})})},t.prototype.segmentMultiPersonParts=function(t,n){return void 0===n&&(n=lt),a(this,void 0,void 0,function(){var r,o,a,d,l,c,h,p,m,g,v,w,y,b,x,S,k,M,E,_,O,A,I=this;return s(this,function(s){switch(s.label){case 0:return ht(n=i(i({},lt),n)),r=U(t),o=r[0],a=r[1],d=$(n.internalResolution,this.baseModel.outputStride,[o,a]),l=et(t,d),c=l.resized,h=l.padding,p=e.tidy(function(){var t=I.predictForMultiPersonInstanceSegmentationAndPart(c),r=t.segmentLogits,i=t.longOffsets,s=t.heatmapScores,l=t.offsets,p=t.displacementFwd,m=t.displacementBwd,g=t.partHeatmaps,v=tt(r,[o,a],d,[[h.top,h.bottom],[h.left,h.right]],!0),w=tt(g,[o,a],d,[[h.top,h.bottom],[h.left,h.right]],!0),y=i;return{segmentation:f(e.squeeze(v),n.segmentationThreshold),longOffsets:y,heatmapScoresRaw:s,offsetsRaw:l,displacementFwdRaw:p,displacementBwdRaw:m,partSegmentation:function(t){var n=t.shape,r=n[0],o=n[1],i=n[2];return e.tidy(function(){var n=u(t),a=e.expandDims(e.range(0,i,1,"int32"),1),s=e.cast(e.matMul(n,a),"int32");return e.reshape(s,[r,o])})}(w)}}),m=p.segmentation,g=p.longOffsets,v=p.heatmapScoresRaw,w=p.offsetsRaw,y=p.displacementFwdRaw,b=p.displacementBwdRaw,x=p.partSegmentation,[4,nt([v,w,y,b])];case 1:return S=s.sent(),k=S[0],M=S[1],E=S[2],_=S[3],O=ot(O=z(k,M,E,_,this.baseModel.outputStride,n.maxDetections,n.scoreThreshold,n.nmsRadius),[o,a],d,h,!1),[4,P(m,g,x,O,o,a,this.baseModel.outputStride,d,h,n.scoreThreshold,n.refineSteps,n.minKeypointScore,n.maxDetections)];case 2:return A=s.sent(),c.dispose(),m.dispose(),g.dispose(),v.dispose(),w.dispose(),y.dispose(),b.dispose(),x.dispose(),[2,A]}})})},t.prototype.dispose=function(){this.baseModel.dispose()},t}();function mt(t){return a(this,void 0,void 0,function(){var r,o,i,a,u,f;return s(this,function(s){switch(s.label){case 0:if(r=t.outputStride,o=t.quantBytes,i=t.multiplier,null==e)throw new Error("Cannot find TensorFlow.js. If you are using a