trtc-sdk-v5
Version:
Tencent Cloud RTC SDK for Web
4 lines (3 loc) • 16 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).FaceDetection=t()}(this,function(){"use strict";function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function t(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function r(e){return function(){var r=this,n=arguments;return new Promise(function(o,i){var a=e.apply(r,n);function s(e){t(a,o,i,s,c,"next",e)}function c(e){t(a,o,i,s,c,"throw",e)}s(void 0)})}}function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,c(n.key),n)}}function o(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=l(e))||t){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function i(){
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function s(r,n,o,i){var s=n&&n.prototype instanceof u?n:u,l=Object.create(s.prototype);return a(l,"_invoke",function(r,n,o){var i,a,s,u=0,l=o||[],f=!1,d={p:0,n:0,v:e,a:h,f:h.bind(e,4),d:function(t,r){return i=t,a=0,s=e,d.n=r,c}};function h(r,n){for(a=r,s=n,t=0;!f&&u&&!o&&t<l.length;t++){var o,i=l[t],h=d.p,v=i[2];r>3?(o=v===n)&&(s=i[(a=i[4])?5:(a=3,3)],i[4]=i[5]=e):i[0]<=h&&((o=r<2&&h<i[1])?(a=0,d.v=n,d.n=i[1]):h<v&&(o=r<3||i[0]>n||n>v)&&(i[4]=r,i[5]=n,d.n=v,a=0))}if(o||r>1)return c;throw f=!0,n}return function(o,l,v){if(u>1)throw TypeError("Generator is already running");for(f&&1===l&&h(l,v),a=l,s=v;(t=a<2?e:s)||!f;){i||(a?a<3?(a>1&&(d.n=-1),h(a,s)):d.n=s:d.v=s);try{if(u=2,i){if(a||(o="next"),t=i[o]){if(!(t=t.call(i,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,a<2&&(a=0)}else 1===a&&(t=i.return)&&t.call(i),a<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),a=1);i=e}else if((t=(f=d.n<0)?s:r.call(n,d))!==c)break}catch(t){i=e,a=1,s=t}finally{u=1}}return{value:t,done:f}}}(r,o,i),!0),l}var c={};function u(){}function l(){}function f(){}t=Object.getPrototypeOf;var d=[][n]?t(t([][n]())):(a(t={},n,function(){return this}),t),h=f.prototype=u.prototype=Object.create(d);function v(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,f):(e.__proto__=f,a(e,o,"GeneratorFunction")),e.prototype=Object.create(h),e}return l.prototype=f,a(h,"constructor",f),a(f,"constructor",l),l.displayName="GeneratorFunction",a(f,o,"GeneratorFunction"),a(h),a(h,o,"Generator"),a(h,n,function(){return this}),a(h,"toString",function(){return"[object Generator]"}),(i=function(){return{w:s,m:v}})()}function a(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}a=function(e,t,r,n){function i(t,r){a(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(i("next",0),i("throw",1),i("return",2))},a(e,t,r,n)}function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,s=[],c=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t);else for(;!(c=(n=i.call(r)).done)&&(s.push(n.value),s.length!==t);c=!0);}catch(e){u=!0,o=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw o}}return s}}(e,t)||l(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==typeof t?t:t+""}function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function l(t,r){if(t){if("string"==typeof t)return e(t,r);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?e(t,r):void 0}}var f=Object.defineProperty,d=Object.getOwnPropertySymbols,h=Object.prototype.hasOwnProperty,v=Object.prototype.propertyIsEnumerable,m=function(e,t,r){return t in e?f(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r},p=function(e,t){for(var r in t||(t={}))h.call(t,r)&&m(e,r,t[r]);if(d){var n,i=o(d(t));try{for(i.s();!(n=i.n()).done;){r=n.value;v.call(t,r)&&m(e,r,t[r])}}catch(e){i.e(e)}finally{i.f()}}return e},y=function(e,t,r){return m(e,"symbol"!==u(t)?t+"":t,r)},g={detectionInterval:{type:"number",required:!1,min:100,max:5e3},minConfidence:{type:"number",required:!1,min:0,max:1},missingTimeout:{type:"number",required:!1,min:0,max:5e3}},b=p({onFaceDetectionStateChanged:{required:!0}},g),w=p({onFaceDetectionStateChanged:{required:!1}},g);var _="undefined"==typeof navigator?"":navigator.userAgent,E=function(e){return new RegExp(e,"i").test(_)},S=function(e){if(E(e)){var t=new RegExp("".concat(e,"\\/([\\d.]+)")),r=_.match(t);if(r&&r[1])return r[1]}return""},k=function(e){if(E(e)){var t=new RegExp("".concat(e,"\\/(\\d+)")),r=_.match(t);if(r&&r[1])return parseFloat(r[1])}return NaN},T=/AppleWebKit\/([\d.]+)/i.exec(_);T&&parseFloat(T[1]);var C=E("iPad"),M="undefined"!=typeof navigator&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&E("Macintosh"),O=E("iPhone")&&!C,D=E("iPod"),F=O||C||D||M,I=E("Android");!function(){if(I){var e=_.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);if(e){var t=e[1]&&parseFloat(e[1]),r=e[2]&&parseFloat(e[2]);if(t&&r)return parseFloat("".concat(e[1],".").concat(e[2]));if(t)return t}}}();I&&E("webkit");var P=E("Firefox"),R=S("Firefox");k("Firefox");var A=E("Edge"),B=S("Edge"),N=E("Edg"),V=S("Edg");k("Edg");var x=E("SogouMobileBrowser"),Q=S("SogouMobileBrowser"),j=E("MetaSr\\s"),H=S("MetaSr\\s"),L=E("TBS"),q=S("TBS"),W=E("XWEB"),G=S("XWEB");E("MSIE\\s8\\.0");var U=E("MSIE\\/\\d+");!function(){if(U){var e=/MSIE\s(\d+)\.\d/.exec(_),t=e&&parseFloat(e[1]);return!t&&/Trident\/7.0/i.test(_)&&/rv:11.0/.test(_)&&(t=11),t}}();var X=E("(micromessenger|webbrowser)"),K=S("MicroMessenger"),Y=!L&&E("MQQBrowser")&&E("COVC"),$=!L&&E("MQQBrowser")&&!E("COVC"),z=$||Y?S("MQQBrowser"):"",J=!L&&E(" QQBrowser"),Z=S(" QQBrowser"),ee=!L&&E("QQBrowserLite"),te=S("QQBrowserLite"),re=!L&&E("MQBHD"),ne=S("MQBHD");E("Windows"),!F&&E("MAC OS X"),!I&&E("Linux"),E("CrOS"),E("MicroMessenger"),E("UCBrowser"),E("Electron");var oe=E("MiuiBrowser"),ie=S("MiuiBrowser"),ae=E("HuaweiBrowser");E("Huawei")||E("HUAWEI"),E("Honor")||E("HONOR");var se=S("HuaweiBrowser"),ce=E("SamsungBrowser"),ue=S("SamsungBrowser"),le=E("HeyTapBrowser"),fe=S("HeyTapBrowser"),de=E("VivoBrowser"),he=S("VivoBrowser");E("OpenHarmony"),S("OpenHarmony");var ve=E("CriOS"),me=E("Chrome"),pe=!A&&!j&&!x&&!L&&!W&&!N&&!J&&!oe&&!ae&&!ce&&!le&&!de&&me;E("HeadlessChrome");var ye=k("Chrome"),ge=S("Chrome");k("Electron");var be=!me&&!$&&!Y&&!ee&&!re&&E("Safari"),we=S("Version"),_e=function(){if(M)return we;if(F){var e=_.match(/OS (\d+)_(\d+)/i);if(e&&e[1]){var t=e[1];return e[2]&&(t+=".".concat(e[2])),t}}return""}();Number(_e.split(".")[0]),Number(_e.split(".")[0]),function(){var e=new Map([[P,["Firefox",R]],[N,["Edg",V]],[pe,["Chrome",ge]],[ve,["ChiOS",S("CriOS")]],[be&&!ve,["Safari",we]],[L,["TBS",q]],[W,["XWEB",G]],[X&&O,["WeChat",K]],[J,["QQ(Win)",Z]],[$,["QQ(Mobile)",z]],[Y,["QQ(Mobile X5)",z]],[ee,["QQ(Mac)",te]],[re,["QQ(iPad)",ne]],[oe,["MI",ie]],[ae,["HW",se]],[ce,["Samsung",ue]],[le,["OPPO",fe]],[de,["VIVO",he]],[A,["EDGE",B]],[x,["SogouMobile",Q]],[j,["Sogou",H]]]),t="unknown",r="unknown";if(e.has(!0)){var n=s(e.get(!0),2);t=n[0],r=n[1]}}();var Ee=0,Se=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.core=t,y(this,"seq"),y(this,"log"),y(this,"preLoadPromise"),y(this,"_faceDetectorHash"),y(this,"_visionTaskRegistry"),y(this,"_faceStatus",!1),y(this,"_startMissing"),y(this,"_minConfidence",.8),y(this,"_missingTimeout",1e3),y(this,"_detectionInterval",300),y(this,"_lastDetectTime",0),y(this,"_videoFrameCallBackId"),y(this,"_video"),y(this,"_onFaceDetectionStateChanged"),Ee+=1,this.seq=Ee,this.log=t.log.createChild({id:"".concat(this.getAlias()).concat(Ee)}),this.log.info("created"),t.assetsPath&&(this.preLoadPromise=this.preload(t.assetsPath))}return t=e,a=[{key:"resetState",value:function(){this._faceStatus=!1,this._startMissing=null,this._lastDetectTime=0}},{key:"preload",value:(h=r(i().m(function e(t){var r,n,o,a;return i().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,this.core.initVisionTaskRegistry(t,["FaceDetector"]);case 1:e.n=3;break;case 2:throw e.p=2,a=e.v,r=this.core.errorModule,n=r.RtcError,o=r.ErrorCode,new n({code:o.INVALID_OPERATION,message:"FaceDetection preload error, please redeploy the assets of the npm package. detail: ".concat(a)});case 3:return e.a(2)}},e,this,[[0,2]])})),function(e){return h.apply(this,arguments)})},{key:"getGroup",value:function(){return"fd"}},{key:"getName",value:function(){return e.Name}},{key:"getAlias",value:function(){return"fd"}},{key:"getValidateRule",value:function(e){switch(e){case"start":return t=this.core,{type:"object",required:!0,properties:b,validate:function(e,r,n,o){var i,a=t.errorModule,s=a.RtcError,c=a.ErrorCode,l=a.ErrorCodeDictionary,f=e.onFaceDetectionStateChanged;if(f&&!t.utils.isFunction(f))throw new s({code:c.INVALID_PARAMETER,extraCode:l.INVALID_PARAMETER_TYPE,fnName:n,messageParams:{key:"onFaceDetectionStateChanged",value:u(f),rule:{type:"Function"}}});if(!(null==(i=t.room.videoManager.cameraTrack)?void 0:i.mediaTrack))throw new s({code:c.INVALID_OPERATION,extraCode:l.INVALID_OPERATION_NEED_VIDEO,fnName:n})}};case"update":return function(e){return{type:"object",required:!0,properties:w,validate:function(t,r,n,o){var i,a=e.errorModule,s=a.RtcError,c=a.ErrorCode,l=a.ErrorCodeDictionary,f=t.onFaceDetectionStateChanged;if(f&&!e.utils.isFunction(f))throw new s({code:c.INVALID_PARAMETER,extraCode:l.INVALID_PARAMETER_TYPE,fnName:n,messageParams:{key:"onFaceDetectionStateChanged",value:u(f),rule:{type:"Function"}}});if(!(null==(i=e.room.videoManager.cameraTrack)?void 0:i.mediaTrack))throw new s({code:c.INVALID_OPERATION,extraCode:l.INVALID_OPERATION_NEED_VIDEO,fnName:n})}}}(this.core);case"stop":return this.core,{name:"StopFaceDetectionOptions",required:!1}}var t}},{key:"getCurrentStatus",value:function(){var e=this,t=this._visionTaskRegistry.getResult(this._faceDetectorHash).detections;this._visionTaskRegistry.resetHashResults();var r=t.length>0;if(r){var n,i=[],a=o(t);try{for(a.s();!(n=a.n()).done;){var s,c=o(n.value.categories);try{for(c.s();!(s=c.n()).done;){var u=s.value;i.push(u.score)}}catch(e){c.e(e)}finally{c.f()}}}catch(e){a.e(e)}finally{a.f()}r&&(r=!!i.find(function(t){return t>=e._minConfidence}))}return r}},{key:"detectFace",value:function(){var e=this.getCurrentStatus();this._startMissing&&Date.now()-this._startMissing>=this._missingTimeout&&e!==this._faceStatus?(this._onFaceDetectionStateChanged(e),this._faceStatus=e,this._startMissing=null):Date.now()-this._lastDetectTime>=this._detectionInterval&&(this._faceStatus!==e&&(e||0===this._missingTimeout?(this._onFaceDetectionStateChanged(e),this._faceStatus=e):this._startMissing||(this._startMissing=Date.now())),this._lastDetectTime=Date.now()),this._video&&(this._videoFrameCallBackId=this._video.requestVideoFrameCallback(this.detectFace.bind(this)))}},{key:"initFaceDetection",value:(d=r(i().m(function e(){var t;return i().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,window.VisionTaskRegistry.getInstance();case 1:return this._visionTaskRegistry=e.v,e.n=2,this._visionTaskRegistry.register(window.VisionTaskType.FaceDetector);case 2:if(t=e.v){e.n=3;break}return e.a(2);case 3:this._faceDetectorHash=t,this._video&&this._visionTaskRegistry.setVideo(this._faceDetectorHash,this._video);case 4:return e.a(2)}},e,this)})),function(){return d.apply(this,arguments)})},{key:"updateOptions",value:function(e){e.onFaceDetectionStateChanged&&(this._onFaceDetectionStateChanged=e.onFaceDetectionStateChanged),e.detectionInterval&&(this._detectionInterval=e.detectionInterval),e.minConfidence&&(this._minConfidence=e.minConfidence),(0===e.missingTimeout||e.missingTimeout)&&(this._missingTimeout=e.missingTimeout)}},{key:"start",value:(f=r(i().m(function e(t){var r,n,o,a,s,c;return i().w(function(e){for(;;)switch(e.n){case 0:if(r=this.core.errorModule,n=r.RtcError,o=r.ErrorCode,this.updateOptions(t),this.preLoadPromise){e.n=2;break}if(this.core.assetsPath){e.n=1;break}throw new n({code:o.INVALID_PARAMETER,message:"you need to deploy the assets of the npm package and set assetsPath param in TRTC.create()"});case 1:this.preLoadPromise=this.preload(this.core.assetsPath);case 2:return e.n=3,this.preLoadPromise;case 3:if(a=this.core.room.videoManager.cameraTrack){e.n=4;break}throw new n({code:o.DEVICE_ERROR,message:"please enable camera display to start detection"});case 4:return s=this.core.VideoPlayer,(c=new s({id:"fd",track:a.mediaTrack,muted:!1,container:null,log:this.core.log})).play(),this._video=c.element,e.n=5,this.initFaceDetection().catch(function(e){throw new n({code:o.UNKNOWN_ERROR,message:e.message})});case 5:this._videoFrameCallBackId=this._video.requestVideoFrameCallback(this.detectFace.bind(this)),a.on(this.core.enums.TrackEvent.MUTE,this.autoHandleMute,this),this.core.kvStatManager.addEnum({key:575700,value:1});case 6:return e.a(2)}},e,this)})),function(e){return f.apply(this,arguments)})},{key:"autoHandleMute",value:function(){var e,t=this,r=this.core.room.videoManager.cameraTrack;this._faceStatus&&(this._faceStatus=!1,this._onFaceDetectionStateChanged(!1)),null==(e=this._video)||e.cancelVideoFrameCallback(this._videoFrameCallBackId),null==r||r.once(this.core.enums.TrackEvent.UNMUTE,function(){t._video&&(t._videoFrameCallBackId=t._video.requestVideoFrameCallback(t.detectFace.bind(t)))})}},{key:"update",value:(l=r(i().m(function e(t){return i().w(function(e){for(;;)switch(e.n){case 0:this.updateOptions(t),this.core.kvStatManager.addEnum({key:575701,value:1});case 1:return e.a(2)}},e,this)})),function(e){return l.apply(this,arguments)})},{key:"stop",value:(c=r(i().m(function e(){var t,r;return i().w(function(e){for(;;)switch(e.n){case 0:this.resetState(),null==(t=this._video)||t.cancelVideoFrameCallback(this._videoFrameCallBackId),null==(r=this.core.room.videoManager.cameraTrack)||r.off(this.core.enums.TrackEvent.MUTE,this.autoHandleMute,this),this.core.kvStatManager.addEnum({key:575702,value:1});case 1:return e.a(2)}},e,this)})),function(){return c.apply(this,arguments)})},{key:"destroy",value:function(){this.stop()}}],s=[{key:"isSupported",value:function(){if(ye<90)return!1;var e=document.createElement("canvas").getContext("webgl2");return!!(e&&e instanceof WebGL2RenderingContext)}}],a&&n(t.prototype,a),s&&n(t,s),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,a,s,c,l,f,d,h}();return y(Se,"Name","FaceDetection"),Se});