UNPKG

handsfree

Version:

Quickly integrate face, hand, and/or pose tracking to your frontend projects in a snap ✨👌

45 lines (43 loc) 18 kB
(function(){/* Copyright The Closure Library Authors. SPDX-License-Identifier: Apache-2.0 */ 'use strict';function u(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}function x(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):{next:u(a)}}function aa(a){if(!(a instanceof Array)){a=x(a);for(var b,c=[];!(b=a.next()).done;)c.push(b.value);a=c}return a}var y="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a}; function ba(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var z=ba(this);function B(a,b){if(b)a:{var c=z;a=a.split(".");for(var d=0;d<a.length-1;d++){var f=a[d];if(!(f in c))break a;c=c[f]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&y(c,a,{configurable:!0,writable:!0,value:b})}}var C; if("function"==typeof Object.setPrototypeOf)C=Object.setPrototypeOf;else{var G;a:{var ca={D:!0},H={};try{H.__proto__=ca;G=H.D;break a}catch(a){}G=!1}C=G?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var I=C;function K(){this.g=!1;this.b=null;this.f=void 0;this.a=1;this.j=this.h=0;this.c=null}function M(a){if(a.g)throw new TypeError("Generator is already running");a.g=!0}K.prototype.i=function(a){this.f=a}; function N(a,b){a.c={F:b,G:!0};a.a=a.h||a.j}K.prototype.return=function(a){this.c={return:a};this.a=this.j};function O(a,b,c){a.a=c;return{value:b}}function da(a){this.a=new K;this.b=a}function ja(a,b){M(a.a);var c=a.a.b;if(c)return P(a,"return"in c?c["return"]:function(d){return{value:d,done:!0}},b,a.a.return);a.a.return(b);return Q(a)} function P(a,b,c,d){try{var f=b.call(a.a.b,c);if(!(f instanceof Object))throw new TypeError("Iterator result "+f+" is not an object");if(!f.done)return a.a.g=!1,f;var k=f.value}catch(e){return a.a.b=null,N(a.a,e),Q(a)}a.a.b=null;d.call(a.a,k);return Q(a)}function Q(a){for(;a.a.a;)try{var b=a.b(a.a);if(b)return a.a.g=!1,{value:b.value,done:!1}}catch(c){a.a.f=void 0,N(a.a,c)}a.a.g=!1;if(a.a.c){b=a.a.c;a.a.c=null;if(b.G)throw b.F;return{value:b.return,done:!0}}return{value:void 0,done:!0}} function ka(a){this.next=function(b){M(a.a);a.a.b?b=P(a,a.a.b.next,b,a.a.i):(a.a.i(b),b=Q(a));return b};this.throw=function(b){M(a.a);a.a.b?b=P(a,a.a.b["throw"],b,a.a.i):(N(a.a,b),b=Q(a));return b};this.return=function(b){return ja(a,b)};this[Symbol.iterator]=function(){return this}}function R(a,b){b=new ka(new da(b));I&&a.prototype&&I(b,a.prototype);return b} B("Symbol",function(a){function b(f){if(this instanceof b)throw new TypeError("Symbol is not a constructor");return new c("jscomp_symbol_"+(f||"")+"_"+d++,f)}function c(f,k){this.a=f;y(this,"description",{configurable:!0,writable:!0,value:k})}if(a)return a;c.prototype.toString=function(){return this.a};var d=0;return b}); B("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c<b.length;c++){var d=z[b[c]];"function"===typeof d&&"function"!=typeof d.prototype[a]&&y(d.prototype,a,{configurable:!0,writable:!0,value:function(){return la(u(this))}})}return a});function la(a){a={next:a};a[Symbol.iterator]=function(){return this};return a} var ma="function"==typeof Object.assign?Object.assign:function(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c];if(d)for(var f in d)Object.prototype.hasOwnProperty.call(d,f)&&(a[f]=d[f])}return a};B("Object.assign",function(a){return a||ma}); B("Promise",function(a){function b(e){this.b=0;this.c=void 0;this.a=[];this.i=!1;var g=this.f();try{e(g.resolve,g.reject)}catch(h){g.reject(h)}}function c(){this.a=null}function d(e){return e instanceof b?e:new b(function(g){g(e)})}if(a)return a;c.prototype.b=function(e){if(null==this.a){this.a=[];var g=this;this.c(function(){g.g()})}this.a.push(e)};var f=z.setTimeout;c.prototype.c=function(e){f(e,0)};c.prototype.g=function(){for(;this.a&&this.a.length;){var e=this.a;this.a=[];for(var g=0;g<e.length;++g){var h= e[g];e[g]=null;try{h()}catch(l){this.f(l)}}}this.a=null};c.prototype.f=function(e){this.c(function(){throw e;})};b.prototype.f=function(){function e(l){return function(m){h||(h=!0,l.call(g,m))}}var g=this,h=!1;return{resolve:e(this.H),reject:e(this.g)}};b.prototype.H=function(e){if(e===this)this.g(new TypeError("A Promise cannot resolve to itself"));else if(e instanceof b)this.B(e);else{a:switch(typeof e){case "object":var g=null!=e;break a;case "function":g=!0;break a;default:g=!1}g?this.A(e):this.h(e)}}; b.prototype.A=function(e){var g=void 0;try{g=e.then}catch(h){this.g(h);return}"function"==typeof g?this.C(g,e):this.h(e)};b.prototype.g=function(e){this.j(2,e)};b.prototype.h=function(e){this.j(1,e)};b.prototype.j=function(e,g){if(0!=this.b)throw Error("Cannot settle("+e+", "+g+"): Promise already settled in state"+this.b);this.b=e;this.c=g;2===this.b&&this.I();this.s()};b.prototype.I=function(){var e=this;f(function(){if(e.u()){var g=z.console;"undefined"!==typeof g&&g.error(e.c)}},1)};b.prototype.u= function(){if(this.i)return!1;var e=z.CustomEvent,g=z.Event,h=z.dispatchEvent;if("undefined"===typeof h)return!0;"function"===typeof e?e=new e("unhandledrejection",{cancelable:!0}):"function"===typeof g?e=new g("unhandledrejection",{cancelable:!0}):(e=z.document.createEvent("CustomEvent"),e.initCustomEvent("unhandledrejection",!1,!0,e));e.promise=this;e.reason=this.c;return h(e)};b.prototype.s=function(){if(null!=this.a){for(var e=0;e<this.a.length;++e)k.b(this.a[e]);this.a=null}};var k=new c;b.prototype.B= function(e){var g=this.f();e.o(g.resolve,g.reject)};b.prototype.C=function(e,g){var h=this.f();try{e.call(g,h.resolve,h.reject)}catch(l){h.reject(l)}};b.prototype.then=function(e,g){function h(q,n){return"function"==typeof q?function(r){try{l(q(r))}catch(p){m(p)}}:n}var l,m,t=new b(function(q,n){l=q;m=n});this.o(h(e,l),h(g,m));return t};b.prototype.catch=function(e){return this.then(void 0,e)};b.prototype.o=function(e,g){function h(){switch(l.b){case 1:e(l.c);break;case 2:g(l.c);break;default:throw Error("Unexpected state: "+ l.b);}}var l=this;null==this.a?k.b(h):this.a.push(h);this.i=!0};b.resolve=d;b.reject=function(e){return new b(function(g,h){h(e)})};b.race=function(e){return new b(function(g,h){for(var l=x(e),m=l.next();!m.done;m=l.next())d(m.value).o(g,h)})};b.all=function(e){var g=x(e),h=g.next();return h.done?d([]):new b(function(l,m){function t(r){return function(p){q[r]=p;n--;0==n&&l(q)}}var q=[],n=0;do q.push(void 0),n++,d(h.value).o(t(q.length-1),m),h=g.next();while(!h.done)})};return b}); function na(a,b){a instanceof String&&(a+="");var c=0,d=!1,f={next:function(){if(!d&&c<a.length){var k=c++;return{value:b(k,a[k]),done:!1}}d=!0;return{done:!0,value:void 0}}};f[Symbol.iterator]=function(){return f};return f}B("Array.prototype.keys",function(a){return a?a:function(){return na(this,function(b){return b})}});var oa=this||self; function S(a,b){a=a.split(".");var c=oa;a[0]in c||"undefined"==typeof c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c[d]&&c[d]!==Object.prototype[d]?c=c[d]:c=c[d]={}:c[d]=b};function W(a,b){var c=void 0;return new (c||(c=Promise))(function(d,f){function k(h){try{g(b.next(h))}catch(l){f(l)}}function e(h){try{g(b["throw"](h))}catch(l){f(l)}}function g(h){h.done?d(h.value):(new c(function(l){l(h.value)})).then(k,e)}g((b=b.apply(a,void 0)).next())})};function X(a,b,c){c=a.createShader(0===c?a.VERTEX_SHADER:a.FRAGMENT_SHADER);a.shaderSource(c,b);a.compileShader(c);if(!a.getShaderParameter(c,a.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+a.getShaderInfoLog(c));return c};function pa(a,b){this.b=a;this.f=b;this.c=0};var qa=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function ra(a,b){return b+a}function sa(a,b){window[a]=b}function ta(a){var b=document.createElement("script");b.setAttribute("src",a);b.setAttribute("crossorigin","anonymous");document.body.appendChild(b);return new Promise(function(c){b.addEventListener("load",function(){c()},!1)})} function ua(a){for(var b=[],c=a.size(),d=0;d<c;++d){var f=a.get(d);b.push({x:f.x,y:f.y,visibility:f.hasVisibility?f.visibility:void 0})}return b}function va(a,b,c){this.graph=a;this.locateFile=b;this.v=c}va.prototype.toArrayBuffer=function(){return W(this,function b(){var c=this,d;return R(b,function(f){return 1==f.a?(c.graph.url?f=O(f,fetch(c.locateFile(c.graph.url,c.v)),3):(f.a=2,f=void 0),f):2!=f.a&&(d=f.f,d.body)?f.return(d.arrayBuffer()):f.return(new ArrayBuffer(0))})})}; function wa(){return W(this,function b(){return R(b,function(c){switch(c.a){case 1:return c.h=2,O(c,WebAssembly.instantiate(qa),4);case 4:c.a=3;c.h=0;break;case 2:return c.h=0,c.c=null,c.return(!1);case 3:return c.return(!0)}})})} function Y(a){this.b=a;this.listeners={};this.j={};this.A={};this.g=this.u=!0;this.i=Promise.resolve();this.locateFile=a&&a.locateFile||ra;if("object"===typeof window)a=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if("undefined"!==typeof location)a=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");this.v=a} Y.prototype.close=function(){this.c&&this.c.delete();return Promise.resolve()}; function xa(a){return W(a,function c(){var d=this,f,k,e,g,h,l,m,t,q;return R(c,function(n){switch(n.a){case 1:f=d;if(!d.u)return n.return();sa("createMediapipeSolutionsWasm",{locateFile:d.locateFile});sa("createMediapipeSolutionsPackedAssets",{locateFile:d.locateFile});k=d.b.files||[];return O(n,wa(),2);case 2:return e=n.f,O(n,Promise.all(k.map(function(r){return void 0===r.simd||r.simd&&e||!r.simd&&!e?ta(f.locateFile(r.url,f.v)):Promise.resolve()})),3);case 3:return g=window.createMediapipeSolutionsWasm, h=window.createMediapipeSolutionsPackedAssets,O(n,g(h),4);case 4:return d.a=n.f,d.f=document.createElement("canvas"),d.a.canvas=d.f,d.a.createContext(d.f,!0,!0,{}),d.c=new d.a.SolutionWasm,l=new va(d.b.graph,d.locateFile,d.v),O(n,d.loadGraph(l),5);case 5:if(d.b.listeners)for(m=x(d.b.listeners),t=m.next();!t.done;t=m.next())q=t.value,ya(d,q);d.u=!1;n.a=0}})})} Y.prototype.setOptions=function(a){if(this.b.options){for(var b=[],c=x(Object.keys(a)),d=c.next();!d.done;d=c.next()){var f=d.value;(d=this.b.options[f])&&d.graphOptionXref&&(f={valueNumber:0===d.type?a[f]:0,valueBoolean:1===d.type?a[f]:!1},d=Object.assign(Object.assign(Object.assign({},{calculatorName:"",calculatorIndex:0}),d.graphOptionXref),f),b.push(d))}0!==b.length&&(this.g=!0,this.h=b)}}; function za(a){return W(a,function c(){var d=this,f,k,e,g,h;return R(c,function(l){if(!d.g)return l.return();f=d.f.getContext("webgl2");if(!f)return alert("Failed to create WebGL canvas context when passing video frame."),l.return();d.s=f;if(d.h){k=new d.a.GraphOptionChangeRequestList;e=x(d.h);for(g=e.next();!g.done;g=e.next())h=g.value,k.push_back(h);d.c.changeOptions(k);k.delete();d.h=void 0}d.g=!1;l.a=0})})} Y.prototype.initialize=function(){return W(this,function b(){var c=this;return R(b,function(d){return 1==d.a?O(d,xa(c),2):O(d,za(c),0)})})};Y.prototype.loadGraph=function(a){return W(this,function c(){var d,f=this;return R(c,function(k){if(1==k.a)return O(k,a.toArrayBuffer(),2);d=k.f;f.c.loadGraph(d);k.a=0})})}; Y.prototype.send=function(a,b){return W(this,function d(){var f=this,k,e,g,h,l,m,t,q;return R(d,function(n){if(1==n.a){if(!f.b.inputs)return n.return();k=1E3*(b||performance.now());return O(n,f.i,2)}if(3!=n.a)return O(n,f.initialize(),3);e=new f.a.PacketDataList;g=x(Object.keys(a));for(h=g.next();!h.done;h=g.next())if(l=h.value,m=f.b.inputs[l]){a:{var r=a[l];switch(m.type){case "video":var p=f.j[m.stream];p||(p=new pa(f.a,f.s),f.j[m.stream]=p);0===p.c&&(p.c=p.b.createTexture());var v=p.f;v.canvas.width= r.videoWidth;v.canvas.height=r.videoHeight;v.activeTexture(v.TEXTURE0);p.b.bindTexture2d(p.c);v.texImage2D(v.TEXTURE_2D,0,v.RGBA,v.RGBA,v.UNSIGNED_BYTE,r);p.b.bindTexture2d(0);p={glName:p.c,width:r.videoWidth,height:r.videoHeight};break a;default:p={}}}t=p;q=m.stream;e.pushTexture2d(Object.assign(Object.assign({},t),{stream:q,timestamp:k}))}f.c.send(e);e.delete();n.a=0})})}; function Aa(a,b,c){if(c.isNumber())return c.getNumber();if(c.isRect())return c.getRect();if(c.isLandmarks())return c.getLandmarks();if(c.isLandmarksList())return c.getLandmarksList();if(c.isClassificationsList())return c.getClassificationsList();if(c.isTexture2d()){var d=a.A[b];d||(d=new pa(a.a,a.s),a.A[b]=d);a=d;c=c.getTexture2d();b=a.f;if(void 0===a.g){d=X(b,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }", 0);var f=X(b,"\n precision highp float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),k=b.createProgram();b.attachShader(k,d);b.attachShader(k,f);b.linkProgram(k);if(!b.getProgramParameter(k,b.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+b.getProgramInfoLog(k));d=a.g=k;b.useProgram(d);f=b.getUniformLocation(d,"sampler0");a.a={m:b.getAttribLocation(d,"aVertex"),l:b.getAttribLocation(d,"aTex"),J:f};a.i= b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,a.i);b.enableVertexAttribArray(a.a.m);b.vertexAttribPointer(a.a.m,2,b.FLOAT,!1,0,0);b.bufferData(b.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),b.STATIC_DRAW);b.bindBuffer(b.ARRAY_BUFFER,null);a.h=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,a.h);b.enableVertexAttribArray(a.a.l);b.vertexAttribPointer(a.a.l,2,b.FLOAT,!1,0,0);b.bufferData(b.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),b.STATIC_DRAW);b.bindBuffer(b.ARRAY_BUFFER,null);b.uniform1i(f, 0)}d=a.a;b.useProgram(a.g);b.canvas.width=c.width;b.canvas.height=c.height;b.viewport(0,0,c.width,c.height);b.activeTexture(b.TEXTURE0);a.b.bindTexture2d(c.glName);b.enableVertexAttribArray(d.m);b.bindBuffer(b.ARRAY_BUFFER,a.i);b.vertexAttribPointer(d.m,2,b.FLOAT,!1,0,0);b.enableVertexAttribArray(d.l);b.bindBuffer(b.ARRAY_BUFFER,a.h);b.vertexAttribPointer(d.l,2,b.FLOAT,!1,0,0);b.bindFramebuffer(b.DRAW_FRAMEBUFFER,null);b.drawArrays(b.TRIANGLE_FAN,0,4);b.disableVertexAttribArray(d.m);b.disableVertexAttribArray(d.l); b.bindBuffer(b.ARRAY_BUFFER,null);a.b.bindTexture2d(0);return a.f.canvas}} function ya(a,b){for(var c=b.name||"$",d=[].concat(aa(b.wants)),f=new a.a.StringList,k=x(b.wants),e=k.next();!e.done;e=k.next())f.push_back(e.value);k=a.a.PacketListener.implement({onResults:function(g){return W(a,function l(){var m,t,q=this,n,r;return R(l,function(p){if(1==p.a){m={};for(t=0;t<b.wants.length;++t)m[d[t]]=Aa(q,b.wants[t],g.get(t));if(b.outs){for(var v=m,ea=b.outs,D={},fa=x(Object.keys(ea)),w=fa.next();!w.done;w=fa.next()){w=w.value;var A=ea[w];if("string"===typeof A)D[w]=v[A];else{var F= v[A.stream];if(void 0!==F){if("landmarks"===A.type)D[w]=ua(F);else if("landmarks_list"===A.type){for(var J=[],T=F.size(),E=0;E<T;++E){var L=F.get(E);J.push(ua(L))}D[w]=J}else if("classifications_list"===A.type){J=[];T=F.size();for(E=0;E<T;++E){var ha=F.get(E);L=J;for(var Ba=L.push,ia=[],Ca=ha.size(),U=0;U<Ca;++U){var V=ha.get(U);ia.push({index:V.index,score:V.score,label:V.label})}Ba.call(L,ia)}D[w]=J}else throw Error("Unknown output config type: '"+A.type+"'");A.transform&&(D[w]=A.transform(D[w]))}}}m= D}(n=q.listeners[c])?p=O(p,q.i,3):(p.a=0,p=void 0);return p}if(r=n(m))return q.i=r,p.return(r);p.a=0})})}});a.c.attachMultiListener(f,k);f.delete()}Y.prototype.onResults=function(a,b){this.listeners[b||"$"]=a};S("Solution",Y);S("OptionType",{NUMBER:0,BOOL:1,0:"NUMBER",1:"BOOL"});function Z(a){a=a||{};this.a=new Y({locateFile:a.locateFile,files:[{url:"hands_solution_packed_assets_loader.js"},{simd:!1,url:"hands_solution_wasm_bin.js"},{simd:!0,url:"hands_solution_simd_wasm_bin.js"}],graph:{url:"hands.binarypb"},inputs:{image:{type:"video",stream:"input_frames_gpu"}},listeners:[{wants:["multi_hand_landmarks","image_transformed","multi_handedness"],outs:{image:"image_transformed",multiHandLandmarks:{type:"landmarks_list",stream:"multi_hand_landmarks"},multiHandedness:{type:"classifications_list", stream:"multi_handedness",transform:function(b){return b.map(function(c){return c[0]})}}}}],options:{selfieMode:{type:1,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},maxNumHands:{type:0,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculator",fieldName:"int_value"}},minDetectionConfidence:{type:0,graphOptionXref:{calculatorType:"TensorsToDetectionsCalculator",calculatorName:"handlandmarktrackinggpu__palmdetectiongpu__TensorsToDetectionsCalculator", fieldName:"min_score_thresh"}},minTrackingConfidence:{type:0,graphOptionXref:{calculatorType:"ThresholdingCalculator",calculatorName:"handlandmarktrackinggpu__handlandmarkgpu__ThresholdingCalculator",fieldName:"threshold"}}}})}Z.prototype.close=function(){this.a.close();return Promise.resolve()};Z.prototype.onResults=function(a){this.a.onResults(a)};Z.prototype.initialize=function(){return W(this,function b(){var c=this;return R(b,function(d){return O(d,c.a.initialize(),0)})})}; Z.prototype.send=function(a){return W(this,function c(){var d=this;return R(c,function(f){return O(f,d.a.send(a),0)})})};Z.prototype.setOptions=function(a){this.a.setOptions(a)};S("HAND_CONNECTIONS",[[0,1],[1,2],[2,3],[3,4],[0,5],[5,6],[6,7],[7,8],[5,9],[9,10],[10,11],[11,12],[9,13],[13,14],[14,15],[15,16],[13,17],[0,17],[17,18],[18,19],[19,20]]);S("Hands",Z);}).call(this);