accurafaceplugin 1.0.31 → 1.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see accuramain.js.LICENSE.txt */
2
- var e={d:(t,n)=>{for(var i in n)e.o(n,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};function n(e){return n="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},n(e)}function i(e,t,n){return(t=d(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(){var e,t,n="function"==typeof Symbol?Symbol:{},i=n.iterator||"@@iterator",a=n.toStringTag||"@@toStringTag";function s(n,i,o,a){var s=i&&i.prototype instanceof d?i:d,l=Object.create(s.prototype);return r(l,"_invoke",function(n,i,o){var r,a,s,d=0,l=o||[],u=!1,h={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return r=t,a=0,s=e,h.n=n,c}};function f(n,i){for(a=n,s=i,t=0;!u&&d&&!o&&t<l.length;t++){var o,r=l[t],f=h.p,p=r[2];n>3?(o=p===i)&&(s=r[(a=r[4])?5:(a=3,3)],r[4]=r[5]=e):r[0]<=f&&((o=n<2&&f<r[1])?(a=0,h.v=i,h.n=r[1]):f<p&&(o=n<3||r[0]>i||i>p)&&(r[4]=n,r[5]=i,h.n=p,a=0))}if(o||n>1)return c;throw u=!0,i}return function(o,l,p){if(d>1)throw TypeError("Generator is already running");for(u&&1===l&&f(l,p),a=l,s=p;(t=a<2?e:s)||!u;){r||(a?a<3?(a>1&&(h.n=-1),f(a,s)):h.n=s:h.v=s);try{if(d=2,r){if(a||(o="next"),t=r[o]){if(!(t=t.call(r,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=r.return)&&t.call(r),a<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),a=1);r=e}else if((t=(u=h.n<0)?s:n.call(i,h))!==c)break}catch(t){r=e,a=1,s=t}finally{d=1}}return{value:t,done:u}}}(n,o,a),!0),l}var c={};function d(){}function l(){}function u(){}t=Object.getPrototypeOf;var h=[][i]?t(t([][i]())):(r(t={},i,(function(){return this})),t),f=u.prototype=d.prototype=Object.create(h);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,r(e,a,"GeneratorFunction")),e.prototype=Object.create(f),e}return l.prototype=u,r(f,"constructor",u),r(u,"constructor",l),l.displayName="GeneratorFunction",r(u,a,"GeneratorFunction"),r(f),r(f,a,"Generator"),r(f,i,(function(){return this})),r(f,"toString",(function(){return"[object Generator]"})),(o=function(){return{w:s,m:p}})()}function r(e,t,n,i){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}r=function(e,t,n,i){function a(t,n){r(e,t,(function(e){return this._invoke(t,n,e)}))}t?o?o(e,t,{value:n,enumerable:!i,configurable:!i,writable:!i}):e[t]=n:(a("next",0),a("throw",1),a("return",2))},r(e,t,n,i)}function a(e,t,n,i,o,r,a){try{var s=e[r](a),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(i,o)}function s(e){return function(){var t=this,n=arguments;return new Promise((function(i,o){var r=e.apply(t,n);function s(e){a(r,i,o,s,c,"next",e)}function c(e){a(r,i,o,s,c,"throw",e)}s(void 0)}))}}function c(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,d(i.key),i)}}function d(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var o=i.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}e.d(t,{A:()=>l});var l=function(){return e=function e(t,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=i.threshold,r=i.textSize,a=i.textColor,s=i.textWeight,c=i.textBgColor,d=i.BodyBgColor,l=i.containerId,u=i.audioUrl,h=i.opencvUrl,f=i.utilsUrl,p=i.piexifUrl;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.haarcascadeUrl=t,this.containerId=l,this.audioUrl=u||"/ding.mp3",this.opencvUrl=h||"/accuraface1.js",this.utilsUrl=f||"/accuraface2.js",this.piexifUrl=p||"/piexif.js",this.faceDetectionCount=0,this.onResultReceived=n,this.FPS=30,this.ZOOM_FACTOR=1.5,this.lastFaceDetectionTime=Date.now(),this.opencvLoaded=!1,this.faceThreshold=o,this.instructSize=r,this.instructColor=a,this.instructWeight=s,this.instructBgColor=c,this.bgcolor=d,this.video=null,this.canvas=null,this.instructionText=null,this.loader=null,this.accuraContainerBox=null,this.styleTag=null,this.unlockAudioHandler=null,this.styleTag=null,this.unlockAudioHandler=null,this.audioUnlocked=!1,this.ding=null},t=[{key:"start",value:(d=s(o().m((function e(){var t=this;return o().w((function(e){for(;;)switch(e.n){case 0:if("undefined"!=typeof window){e.n=1;break}return e.a(2);case 1:return this.createUI(),this.addStyles(),this.video=document.getElementById("videoInput"),this.canvas=document.getElementById("canvasOutput"),this.instructionText=document.getElementById("instructionText"),this.loader=document.getElementById("loader"),e.n=2,this.loadDependencies();case 2:this.ding=new Audio(this.audioUrl),this.ding.preload="auto",this.ding.muted=!0,this.checkOpenCV(),this.unlockAudioHandler=function(){!t.audioUnlocked&&t.ding&&(t.ding.play().then((function(){t.ding.pause(),t.ding.currentTime=0,t.ding.muted=!1,t.audioUnlocked=!0})).catch((function(){})),document.removeEventListener("click",t.unlockAudioHandler))},document.addEventListener("click",this.unlockAudioHandler,{once:!0});case 3:return e.a(2)}}),e,this)}))),function(){return d.apply(this,arguments)})},{key:"destroy",value:function(){"undefined"!=typeof window&&(this.video&&this.video.srcObject&&this.video.srcObject.getTracks().forEach((function(e){return e.stop()})),this.accuraContainerBox&&this.accuraContainerBox.parentNode&&this.accuraContainerBox.parentNode.removeChild(this.accuraContainerBox),this.styleTag&&this.styleTag.parentNode&&this.styleTag.parentNode.removeChild(this.styleTag),this.unlockAudioHandler&&document.removeEventListener("click",this.unlockAudioHandler),this.opencvLoaded=!1,this.faceDetectionCount=0)}},{key:"createUI",value:function(){this.accuraContainerBox=document.createElement("div"),this.accuraContainerBox.className="accuraContainerBox";var e=document.createElement("div");e.className="camera-input",e.style.position="relative",this.cameraInput=e;var t=document.createElement("video");t.id="videoInput",t.width=640,t.height=480,t.autoplay=!0,t.muted=!0;var n=document.createElement("canvas");n.id="canvasOutput",n.style.display="none";var i=document.createElement("div");i.id="loader",i.className="loader",i.innerHTML='\n <div class="loader-wrapper">\n <div class="spinner"></div>\n <p class="loader-text">Loading...</p>\n </div>\n ';var o=document.createElement("p");o.id="instructionText",e.appendChild(t),e.appendChild(n),e.appendChild(i),this.accuraContainerBox.appendChild(e),this.accuraContainerBox.appendChild(o);var r=this.containerId?document.getElementById(this.containerId):document.body;r?r.appendChild(this.accuraContainerBox):document.body.appendChild(this.accuraContainerBox)}},{key:"checkOpenCV",value:function(){var e=this;this.showLoader();var t=function(){var n=window.cv&&"function"==typeof window.cv.Mat,i=window.Utils&&"function"==typeof window.Utils;n&&i?(e.opencvLoaded=!0,e.hideLoader(),e.openCvReady()):setTimeout(t,100)};t()}},{key:"showLoader",value:function(){this.loader&&(this.loader.style.display="flex")}},{key:"hideLoader",value:function(){this.loader&&(this.loader.style.display="none")}},{key:"loadScript",value:(a=s(o().m((function e(t){return o().w((function(e){for(;;)if(0===e.n)return e.a(2,new Promise((function(e,n){if(document.querySelector('script[src="'.concat(t,'"]')))e();else{var i=document.createElement("script");i.src=t,i.async=!0,i.onload=e,i.onerror=n,document.head.appendChild(i)}})))}),e)}))),function(e){return a.apply(this,arguments)})},{key:"loadDependencies",value:(r=s(o().m((function e(){return o().w((function(e){for(;;)switch(e.n){case 0:if("undefined"!=typeof window){e.n=1;break}return e.a(2);case 1:return window.Module={locateFile:function(e){return e&&""!==e.trim()?"/".concat(e):e}},e.n=2,this.loadScript(this.opencvUrl);case 2:return e.n=3,this.loadScript(this.utilsUrl);case 3:return e.n=4,this.loadScript(this.piexifUrl);case 4:return e.a(2)}}),e,this)}))),function(){return r.apply(this,arguments)})},{key:"openCvReady",value:function(){var e=this;navigator.mediaDevices.getUserMedia({video:!0,audio:!1}).then((function(t){e.video.srcObject=t,e.video.play(),e.isCanvasVisible=!1,e.video.addEventListener("loadedmetadata",(function(){if(e.video.videoWidth&&e.video.videoHeight){e.video.width=e.video.videoWidth,e.video.height=e.video.videoHeight,e.canvas.width=e.video.videoWidth,e.canvas.height=e.video.videoHeight;var t=new window.cv.Mat(e.video.videoHeight,e.video.videoWidth,window.cv.CV_8UC4),n=new window.cv.Mat(e.video.videoHeight,e.video.videoWidth,window.cv.CV_8UC4),i=new window.cv.VideoCapture(e.video),o=new window.cv.CascadeClassifier,r=new window.Utils("errorMessage"),a=e.haarcascadeUrl;r.createFileFromUrl(a,a,(function(){o.load(a),e.facepluginopencv(i,t,n,o)}))}}))})).catch((function(e){console.error("An error occurred while accessing media devices: ",e)}))}},{key:"isFaceInsideOval",value:function(e,t){var n=t.width/2,i=t.height/2,o=t.width/2,r=t.height/2,a=e.x+e.width/2,s=e.y+e.height/2;return Math.pow(a-n,2)/Math.pow(o,2)+Math.pow(s-i,2)/Math.pow(r,2)<=1}},{key:"facepluginopencv",value:function(e,t,n,i){var o=this,r=Date.now();e.read(t);var a=new window.cv.Rect(t.cols/2-t.cols/(2*this.ZOOM_FACTOR),t.rows/2-t.rows/(2*this.ZOOM_FACTOR),t.cols/this.ZOOM_FACTOR,t.rows/this.ZOOM_FACTOR),s=t.roi(a);window.cv.resize(s,n,new window.cv.Size(t.cols,t.rows),0,0,window.cv.INTER_LINEAR),this.instructionText.textContent="Keep Your Face In The Frame";var c=new window.cv.RectVector;try{if(i.detectMultiScale(t,c,1.5,3,0),1===c.size()){var d=c.get(0),l=(new window.cv.Rect(d.x,d.y,d.width,d.height),.14),u=Math.max(0,d.x-d.width*l),h=Math.max(0,d.y-d.height*l),f=Math.min(t.cols-u,1.28*d.width),p=Math.min(t.rows-h,1.28*d.height),v=new window.cv.Rect(u,h,f,p);window.cv.rectangle(t,new window.cv.Point(v.x,v.y),new window.cv.Point(v.x+v.width,v.y+v.height),[5,255,0,255],2);var m=d.width*d.height/(Math.PI*(this.canvas.width/2)*(this.canvas.height/2))*100;if(this.isFaceInsideOval(d,this.canvas)){if(m<30)this.instructionText.textContent="Stay closer to the window";else if(m>=30&&m<=100&&(this.instructionText.textContent="Processing....",this.faceDetectionCount++,this.faceDetectionCount===this.faceThreshold)){var w=document.createElement("div");return w.id="faceScanSuccess",w.innerHTML='\n <div class="scan-success-wrapper">\n \x3c!-- Viewfinder frame (your provided paths, scaled up a bit for better visibility) --\x3e\n <svg class="face-viewfinder" width="120" height="120" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path d="M8 18V8h10" stroke="#ffffff" stroke-width="5" stroke-linecap="round"/>\n <path d="M46 8h10v10" stroke="#ffffff" stroke-width="5" stroke-linecap="round"/>\n <path d="M56 46v10H46" stroke="#ffffff" stroke-width="5" stroke-linecap="round"/>\n <path d="M18 56H8V46" stroke="#ffffff" stroke-width="5" stroke-linecap="round"/>\n \x3c!-- Face representation (small circle + smile) --\x3e\n <circle cx="32" cy="26" r="9" stroke="#ffffff" stroke-width="4" fill="none"/>\n <path d="M22 42c4-8 16-8 20 0" stroke="#ffffff" stroke-width="4" stroke-linecap="round" fill="none"/>\n </svg>\n\n \x3c!-- Black checkmark overlay (appears on success) --\x3e\n <svg class="success-tick" viewBox="0 0 52 52" width="80" height="80">\n <path \n d="M14.1 27.2 L21.2 34.4 L37.9 17.6" \n stroke="green" \n stroke-width="6" \n stroke-linecap="round" \n stroke-linejoin="round" \n fill="none"\n />\n </svg>\n </div>\n',Object.assign(w.style,{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",zIndex:"200",pointerEvents:"none",textAlign:"center"}),this.cameraInput.appendChild(w),setTimeout((function(){return w.remove()}),1500),this.audioUnlocked&&(this.ding.currentTime=0,this.ding.play().catch((function(){}))),void setTimeout((function(){o.convertToBase64WithMetadata(v);var e=o.video.srcObject;e&&e.getTracks().forEach((function(e){return e.stop()}))}),1500)}}else this.instructionText.textContent="Move inside the oval window";this.lastFaceDetectionTime=Date.now()}}catch(e){console.error("Error processing video:",e)}finally{c.delete()}this.isCanvasVisible&&(window.cv.flip(t,t,1),window.cv.imshow(this.canvas.id,t));var y=1e3/this.FPS-(Date.now()-r);setTimeout((function(){return o.facepluginopencv(e,t,n,i)}),y)}},{key:"convertToBase64WithMetadata",value:function(e){var t=document.createElement("canvas");t.width=this.video.videoWidth,t.height=this.video.videoHeight;var n=t.getContext("2d");n.drawImage(this.video,0,0,t.width,t.height);var o=document.createElement("canvas");o.width=e.width,o.height=e.height;var r=o.getContext("2d"),a=n.getImageData(e.x,e.y,e.width,e.height);r.putImageData(a,0,0);var s={"0th":i(i({},piexif.ImageIFD.Make,"AccuraFace"),piexif.ImageIFD.Model,"FaceDetectionCamera")},c=piexif.dump(s),d=piexif.insert(c,o.toDataURL("image/jpeg",.92));this.onResultReceived&&(document.querySelector(".accuraContainerBox").style.display="none",this.onResultReceived({base64:d,metadata:s}))}},{key:"addStyles",value:function(){var e="\n body {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100vh;\n margin: 0;\n background-color: ".concat(this.bgcolor||"rgb(255, 255, 255)",";\n font-family: Arial, sans-serif;\n flex-direction: column;\n }\n \n .accuraContainerBox {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: transparent;\n border-radius: 10px;\n }\n \n #instructionText {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px;\n background-color: ").concat(this.instructBgColor||"#fff",";\n color: ").concat(this.instructColor||"rgb(10, 18, 131)",";\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border-radius: 5px;\n margin-bottom: 20px;\n font-size: ").concat(this.instructSize||"30px",";\n font-weight: ").concat(this.instructWeight||"bold",";\n }\n \n .camera-input {\n width: 250px;\n height: 370px;\n position: relative;\n overflow: hidden;\n border-radius: 50%;\n transform: scale(1.0); \n }\n \n #videoInput {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transition: transform 0.3s ease-in-out;\n transform: scaleX(-1) scale(1.5); \n }\n \n #canvasOutput {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n transform: scale(1.5);\n }\n \n #response-text {\n font-size: 18px;\n color: #333;\n margin-top: 10px;\n }\n\n/* Desktop (default) */\n\n /* Laptop */\n @media (max-width: 1200px) {\n #instructionText {\n font-size: ").concat(this.instructSize||"28px",";\n }\n }\n\n /* iPad / Tablet */\n @media (max-width: 992px) {\n #instructionText {\n font-size: ").concat(this.instructSize||"28px",";\n }\n }\n\n /* Mobile */\n @media (max-width: 768px) {\n #instructionText {\n font-size: 25px;\n }\n }\n\n /* Small Mobile (Extra Small Devices) */\n @media (max-width: 480px) {\n #instructionText {\n font-size: ").concat(this.instructSize||"18px",";\n }\n }\n\n .scan-success-wrapper {\n position: relative;\n width: 140px;\n height: 140px;\n margin: 0 auto;\n}\n\n.face-viewfinder {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n opacity: 0.9;\n animation: pulseFrame 2s ease-in-out forwards;\n}\n\n.success-tick {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.6);\n opacity: 0;\n z-index: 2;\n animation: tickReveal 1.1s ease-out 0.4s forwards;\n}\n\n/* Animations */\n@keyframes pulseFrame {\n 0% { opacity: 0.6; transform: translate(-50%, -50%) scale(0.92); }\n 50% { opacity: 1; transform: translate(-50%, -50%) scale(1.08); }\n 100% { opacity: 0.85; transform: translate(-50%, -50%) scale(1); }\n}\n\n@keyframes tickReveal {\n 0% { \n transform: translate(-50%, -50%) scale(0.4); \n opacity: 0; \n stroke-dashoffset: 60; \n }\n 40% { \n transform: translate(-50%, -50%) scale(1.15); \n opacity: 1; \n }\n 70% { transform: translate(-50%, -50%) scale(0.95); }\n 100% { \n transform: translate(-50%, -50%) scale(1); \n opacity: 1; \n stroke-dashoffset: 0; \n }\n}\n\n/* Add stroke-dasharray to the tick path via JS or CSS for draw effect */\n.success-tick path {\n stroke-dasharray: 60;\n stroke-dashoffset: 60;\n animation: drawTick 0.8s ease-out 0.5s forwards;\n}\n\n@keyframes drawTick {\n to { stroke-dashoffset: 0; }\n}\n\n/* Fullscreen White Loader */\n#loader {\n position: fixed;\n inset: 0;\n width: 100%;\n height: 100%;\n background: #ffffff;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 999999;\n}\n\n.loader-wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 18px;\n}\n\n.spinner {\n width: 68px;\n height: 68px;\n border: 6px solid rgba(0, 0, 0, 0.12);\n border-top: 6px solid #111111;\n border-radius: 50%;\n animation: spin 0.9s linear infinite;\n}\n\n.loader-text {\n color: #111111;\n font-size: 20px;\n font-weight: 600;\n text-align: center;\n margin: 0;\n font-family: Arial, sans-serif;\n}\n\n/* Tablet */\n@media (max-width: 768px) {\n .spinner {\n width: 56px;\n height: 56px;\n }\n\n .loader-text {\n font-size: 17px;\n }\n}\n\n/* Mobile */\n@media (max-width: 480px) {\n .spinner {\n width: 48px;\n height: 48px;\n border-width: 5px;\n }\n\n .loader-text {\n font-size: 15px;\n }\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n ");this.styleTag=document.createElement("style"),this.styleTag.type="text/css",this.styleTag.innerText=e,document.head.appendChild(this.styleTag)}}],t&&c(e.prototype,t),n&&c(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n,r,a,d}();const u=t.A;export{u as default};
2
+ var e={d:(t,n)=>{for(var i in n)e.o(n,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};function n(e){return n="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},n(e)}function i(e,t,n){return(t=d(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(){var e,t,n="function"==typeof Symbol?Symbol:{},i=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function s(n,i,o,r){var s=i&&i.prototype instanceof d?i:d,l=Object.create(s.prototype);return a(l,"_invoke",function(n,i,o){var a,r,s,d=0,l=o||[],u=!1,h={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return a=t,r=0,s=e,h.n=n,c}};function f(n,i){for(r=n,s=i,t=0;!u&&d&&!o&&t<l.length;t++){var o,a=l[t],f=h.p,p=a[2];n>3?(o=p===i)&&(s=a[(r=a[4])?5:(r=3,3)],a[4]=a[5]=e):a[0]<=f&&((o=n<2&&f<a[1])?(r=0,h.v=i,h.n=a[1]):f<p&&(o=n<3||a[0]>i||i>p)&&(a[4]=n,a[5]=i,h.n=p,r=0))}if(o||n>1)return c;throw u=!0,i}return function(o,l,p){if(d>1)throw TypeError("Generator is already running");for(u&&1===l&&f(l,p),r=l,s=p;(t=r<2?e:s)||!u;){a||(r?r<3?(r>1&&(h.n=-1),f(r,s)):h.n=s:h.v=s);try{if(d=2,a){if(r||(o="next"),t=a[o]){if(!(t=t.call(a,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,r<2&&(r=0)}else 1===r&&(t=a.return)&&t.call(a),r<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),r=1);a=e}else if((t=(u=h.n<0)?s:n.call(i,h))!==c)break}catch(t){a=e,r=1,s=t}finally{d=1}}return{value:t,done:u}}}(n,o,r),!0),l}var c={};function d(){}function l(){}function u(){}t=Object.getPrototypeOf;var h=[][i]?t(t([][i]())):(a(t={},i,(function(){return this})),t),f=u.prototype=d.prototype=Object.create(h);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,a(e,r,"GeneratorFunction")),e.prototype=Object.create(f),e}return l.prototype=u,a(f,"constructor",u),a(u,"constructor",l),l.displayName="GeneratorFunction",a(u,r,"GeneratorFunction"),a(f),a(f,r,"Generator"),a(f,i,(function(){return this})),a(f,"toString",(function(){return"[object Generator]"})),(o=function(){return{w:s,m:p}})()}function a(e,t,n,i){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}a=function(e,t,n,i){function r(t,n){a(e,t,(function(e){return this._invoke(t,n,e)}))}t?o?o(e,t,{value:n,enumerable:!i,configurable:!i,writable:!i}):e[t]=n:(r("next",0),r("throw",1),r("return",2))},a(e,t,n,i)}function r(e,t,n,i,o,a,r){try{var s=e[a](r),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(i,o)}function s(e){return function(){var t=this,n=arguments;return new Promise((function(i,o){var a=e.apply(t,n);function s(e){r(a,i,o,s,c,"next",e)}function c(e){r(a,i,o,s,c,"throw",e)}s(void 0)}))}}function c(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,d(i.key),i)}}function d(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var o=i.call(e,t||"default");if("object"!=n(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==n(t)?t:t+""}e.d(t,{A:()=>l});var l=function(){return e=function e(t,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=i.threshold,a=i.textSize,r=i.textColor,s=i.textWeight,c=i.textBgColor,d=i.BodyBgColor,l=i.containerId,u=i.audioUrl,h=i.opencvUrl,f=i.utilsUrl,p=i.piexifUrl,v=i.basePath;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.haarcascadeUrl=t,this.containerId=l,this.basePath=v||"https://unpkg.com/accurafaceplugin/dist/",this.audioUrl=u||"".concat(this.basePath,"ding.mp3"),this.opencvUrl=h||"".concat(this.basePath,"accuraface1.js"),this.utilsUrl=f||"".concat(this.basePath,"accuraface2.js"),this.piexifUrl=p||"".concat(this.basePath,"piexif.js"),this.faceDetectionCount=0,this.onResultReceived=n,this.FPS=30,this.ZOOM_FACTOR=1.5,this.lastFaceDetectionTime=Date.now(),this.opencvLoaded=!1,this.faceThreshold=o,this.instructSize=a,this.instructColor=r,this.instructWeight=s,this.instructBgColor=c,this.bgcolor=d,this.video=null,this.canvas=null,this.instructionText=null,this.loader=null,this.accuraContainerBox=null,this.styleTag=null,this.unlockAudioHandler=null,this.styleTag=null,this.unlockAudioHandler=null,this.audioUnlocked=!1,this.ding=null},t=[{key:"start",value:(d=s(o().m((function e(){var t=this;return o().w((function(e){for(;;)switch(e.n){case 0:if("undefined"!=typeof window){e.n=1;break}return e.a(2);case 1:return this.createUI(),this.addStyles(),this.video=document.getElementById("videoInput"),this.canvas=document.getElementById("canvasOutput"),this.instructionText=document.getElementById("instructionText"),this.loader=document.getElementById("loader"),e.n=2,this.loadDependencies();case 2:this.ding=new Audio(this.audioUrl),this.ding.preload="auto",this.ding.muted=!0,this.checkOpenCV(),this.unlockAudioHandler=function(){!t.audioUnlocked&&t.ding&&(t.ding.play().then((function(){t.ding.pause(),t.ding.currentTime=0,t.ding.muted=!1,t.audioUnlocked=!0})).catch((function(){})),document.removeEventListener("click",t.unlockAudioHandler))},document.addEventListener("click",this.unlockAudioHandler,{once:!0});case 3:return e.a(2)}}),e,this)}))),function(){return d.apply(this,arguments)})},{key:"destroy",value:function(){"undefined"!=typeof window&&(this.video&&this.video.srcObject&&this.video.srcObject.getTracks().forEach((function(e){return e.stop()})),this.accuraContainerBox&&this.accuraContainerBox.parentNode&&this.accuraContainerBox.parentNode.removeChild(this.accuraContainerBox),this.styleTag&&this.styleTag.parentNode&&this.styleTag.parentNode.removeChild(this.styleTag),this.unlockAudioHandler&&document.removeEventListener("click",this.unlockAudioHandler),this.opencvLoaded=!1,this.faceDetectionCount=0)}},{key:"createUI",value:function(){this.accuraContainerBox=document.createElement("div"),this.accuraContainerBox.className="accuraContainerBox";var e=document.createElement("div");e.className="camera-input",e.style.position="relative",this.cameraInput=e;var t=document.createElement("video");t.id="videoInput",t.width=640,t.height=480,t.autoplay=!0,t.muted=!0;var n=document.createElement("canvas");n.id="canvasOutput",n.style.display="none";var i=document.createElement("div");i.id="loader",i.className="loader",i.innerHTML='\n <div class="loader-wrapper">\n <div class="spinner"></div>\n <p class="loader-text">Loading...</p>\n </div>\n ';var o=document.createElement("p");o.id="instructionText",e.appendChild(t),e.appendChild(n),e.appendChild(i),this.accuraContainerBox.appendChild(e),this.accuraContainerBox.appendChild(o);var a=this.containerId?document.getElementById(this.containerId):document.body;a?a.appendChild(this.accuraContainerBox):document.body.appendChild(this.accuraContainerBox)}},{key:"checkOpenCV",value:function(){var e=this;this.showLoader();var t=function(){var n=window.cv&&"function"==typeof window.cv.Mat,i=window.Utils&&"function"==typeof window.Utils;n&&i?(e.opencvLoaded=!0,e.hideLoader(),e.openCvReady()):setTimeout(t,100)};t()}},{key:"showLoader",value:function(){this.loader&&(this.loader.style.display="flex")}},{key:"hideLoader",value:function(){this.loader&&(this.loader.style.display="none")}},{key:"loadScript",value:(r=s(o().m((function e(t){return o().w((function(e){for(;;)if(0===e.n)return e.a(2,new Promise((function(e,n){if(document.querySelector('script[src="'.concat(t,'"]')))e();else{var i=document.createElement("script");i.src=t,i.async=!0,i.onload=e,i.onerror=function(){return n(new Error("Failed to load script: ".concat(t)))},document.head.appendChild(i)}})))}),e)}))),function(e){return r.apply(this,arguments)})},{key:"loadDependencies",value:(a=s(o().m((function e(){var t=this;return o().w((function(e){for(;;)switch(e.n){case 0:if("undefined"!=typeof window){e.n=1;break}return e.a(2);case 1:return window.Module={locateFile:function(e){return e&&""!==e.trim()?"".concat(t.basePath).concat(e):e}},e.n=2,this.loadScript(this.opencvUrl);case 2:return e.n=3,this.loadScript(this.utilsUrl);case 3:return e.n=4,this.loadScript(this.piexifUrl);case 4:return e.a(2)}}),e,this)}))),function(){return a.apply(this,arguments)})},{key:"openCvReady",value:function(){var e=this;navigator.mediaDevices.getUserMedia({video:!0,audio:!1}).then((function(t){e.video.srcObject=t,e.video.play(),e.isCanvasVisible=!1,e.video.addEventListener("loadedmetadata",(function(){if(e.video.videoWidth&&e.video.videoHeight){e.video.width=e.video.videoWidth,e.video.height=e.video.videoHeight,e.canvas.width=e.video.videoWidth,e.canvas.height=e.video.videoHeight;var t=new window.cv.Mat(e.video.videoHeight,e.video.videoWidth,window.cv.CV_8UC4),n=new window.cv.Mat(e.video.videoHeight,e.video.videoWidth,window.cv.CV_8UC4),i=new window.cv.VideoCapture(e.video),o=new window.cv.CascadeClassifier,a=new window.Utils("errorMessage"),r=e.haarcascadeUrl;a.createFileFromUrl(r,r,(function(){o.load(r),e.facepluginopencv(i,t,n,o)}))}}))})).catch((function(e){console.error("An error occurred while accessing media devices: ",e)}))}},{key:"isFaceInsideOval",value:function(e,t){var n=t.width/2,i=t.height/2,o=t.width/2,a=t.height/2,r=e.x+e.width/2,s=e.y+e.height/2;return Math.pow(r-n,2)/Math.pow(o,2)+Math.pow(s-i,2)/Math.pow(a,2)<=1}},{key:"facepluginopencv",value:function(e,t,n,i){var o=this,a=Date.now();e.read(t);var r=new window.cv.Rect(t.cols/2-t.cols/(2*this.ZOOM_FACTOR),t.rows/2-t.rows/(2*this.ZOOM_FACTOR),t.cols/this.ZOOM_FACTOR,t.rows/this.ZOOM_FACTOR),s=t.roi(r);window.cv.resize(s,n,new window.cv.Size(t.cols,t.rows),0,0,window.cv.INTER_LINEAR),this.instructionText.textContent="Keep Your Face In The Frame";var c=new window.cv.RectVector;try{if(i.detectMultiScale(t,c,1.5,3,0),1===c.size()){var d=c.get(0),l=(new window.cv.Rect(d.x,d.y,d.width,d.height),.14),u=Math.max(0,d.x-d.width*l),h=Math.max(0,d.y-d.height*l),f=Math.min(t.cols-u,1.28*d.width),p=Math.min(t.rows-h,1.28*d.height),v=new window.cv.Rect(u,h,f,p);window.cv.rectangle(t,new window.cv.Point(v.x,v.y),new window.cv.Point(v.x+v.width,v.y+v.height),[5,255,0,255],2);var m=d.width*d.height/(Math.PI*(this.canvas.width/2)*(this.canvas.height/2))*100;if(this.isFaceInsideOval(d,this.canvas)){if(m<30)this.instructionText.textContent="Stay closer to the window";else if(m>=30&&m<=100&&(this.instructionText.textContent="Processing....",this.faceDetectionCount++,this.faceDetectionCount===this.faceThreshold)){var w=document.createElement("div");return w.id="faceScanSuccess",w.innerHTML='\n <div class="scan-success-wrapper">\n \x3c!-- Viewfinder frame (your provided paths, scaled up a bit for better visibility) --\x3e\n <svg class="face-viewfinder" width="120" height="120" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path d="M8 18V8h10" stroke="#ffffff" stroke-width="5" stroke-linecap="round"/>\n <path d="M46 8h10v10" stroke="#ffffff" stroke-width="5" stroke-linecap="round"/>\n <path d="M56 46v10H46" stroke="#ffffff" stroke-width="5" stroke-linecap="round"/>\n <path d="M18 56H8V46" stroke="#ffffff" stroke-width="5" stroke-linecap="round"/>\n \x3c!-- Face representation (small circle + smile) --\x3e\n <circle cx="32" cy="26" r="9" stroke="#ffffff" stroke-width="4" fill="none"/>\n <path d="M22 42c4-8 16-8 20 0" stroke="#ffffff" stroke-width="4" stroke-linecap="round" fill="none"/>\n </svg>\n\n \x3c!-- Black checkmark overlay (appears on success) --\x3e\n <svg class="success-tick" viewBox="0 0 52 52" width="80" height="80">\n <path \n d="M14.1 27.2 L21.2 34.4 L37.9 17.6" \n stroke="green" \n stroke-width="6" \n stroke-linecap="round" \n stroke-linejoin="round" \n fill="none"\n />\n </svg>\n </div>\n',Object.assign(w.style,{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",zIndex:"200",pointerEvents:"none",textAlign:"center"}),this.cameraInput.appendChild(w),setTimeout((function(){return w.remove()}),1500),this.audioUnlocked&&(this.ding.currentTime=0,this.ding.play().catch((function(){}))),void setTimeout((function(){o.convertToBase64WithMetadata(v);var e=o.video.srcObject;e&&e.getTracks().forEach((function(e){return e.stop()}))}),1500)}}else this.instructionText.textContent="Move inside the oval window";this.lastFaceDetectionTime=Date.now()}}catch(e){console.error("Error processing video:",e)}finally{c.delete()}this.isCanvasVisible&&(window.cv.flip(t,t,1),window.cv.imshow(this.canvas.id,t));var y=1e3/this.FPS-(Date.now()-a);setTimeout((function(){return o.facepluginopencv(e,t,n,i)}),y)}},{key:"convertToBase64WithMetadata",value:function(e){var t=document.createElement("canvas");t.width=this.video.videoWidth,t.height=this.video.videoHeight;var n=t.getContext("2d");n.drawImage(this.video,0,0,t.width,t.height);var o=document.createElement("canvas");o.width=e.width,o.height=e.height;var a=o.getContext("2d"),r=n.getImageData(e.x,e.y,e.width,e.height);a.putImageData(r,0,0);var s={"0th":i(i({},piexif.ImageIFD.Make,"AccuraFace"),piexif.ImageIFD.Model,"FaceDetectionCamera")},c=piexif.dump(s),d=piexif.insert(c,o.toDataURL("image/jpeg",.92));this.onResultReceived&&(document.querySelector(".accuraContainerBox").style.display="none",this.onResultReceived({base64:d,metadata:s}))}},{key:"addStyles",value:function(){var e="\n body {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100vh;\n margin: 0;\n background-color: ".concat(this.bgcolor||"rgb(255, 255, 255)",";\n font-family: Arial, sans-serif;\n flex-direction: column;\n }\n \n .accuraContainerBox {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: transparent;\n border-radius: 10px;\n }\n \n #instructionText {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px;\n background-color: ").concat(this.instructBgColor||"#fff",";\n color: ").concat(this.instructColor||"rgb(10, 18, 131)",";\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border-radius: 5px;\n margin-bottom: 20px;\n font-size: ").concat(this.instructSize||"30px",";\n font-weight: ").concat(this.instructWeight||"bold",";\n }\n \n .camera-input {\n width: 250px;\n height: 370px;\n position: relative;\n overflow: hidden;\n border-radius: 50%;\n transform: scale(1.0); \n }\n \n #videoInput {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transition: transform 0.3s ease-in-out;\n transform: scaleX(-1) scale(1.5); \n }\n \n #canvasOutput {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n transform: scale(1.5);\n }\n \n #response-text {\n font-size: 18px;\n color: #333;\n margin-top: 10px;\n }\n\n/* Desktop (default) */\n\n /* Laptop */\n @media (max-width: 1200px) {\n #instructionText {\n font-size: ").concat(this.instructSize||"28px",";\n }\n }\n\n /* iPad / Tablet */\n @media (max-width: 992px) {\n #instructionText {\n font-size: ").concat(this.instructSize||"28px",";\n }\n }\n\n /* Mobile */\n @media (max-width: 768px) {\n #instructionText {\n font-size: 25px;\n }\n }\n\n /* Small Mobile (Extra Small Devices) */\n @media (max-width: 480px) {\n #instructionText {\n font-size: ").concat(this.instructSize||"18px",";\n }\n }\n\n .scan-success-wrapper {\n position: relative;\n width: 140px;\n height: 140px;\n margin: 0 auto;\n}\n\n.face-viewfinder {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n opacity: 0.9;\n animation: pulseFrame 2s ease-in-out forwards;\n}\n\n.success-tick {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.6);\n opacity: 0;\n z-index: 2;\n animation: tickReveal 1.1s ease-out 0.4s forwards;\n}\n\n/* Animations */\n@keyframes pulseFrame {\n 0% { opacity: 0.6; transform: translate(-50%, -50%) scale(0.92); }\n 50% { opacity: 1; transform: translate(-50%, -50%) scale(1.08); }\n 100% { opacity: 0.85; transform: translate(-50%, -50%) scale(1); }\n}\n\n@keyframes tickReveal {\n 0% { \n transform: translate(-50%, -50%) scale(0.4); \n opacity: 0; \n stroke-dashoffset: 60; \n }\n 40% { \n transform: translate(-50%, -50%) scale(1.15); \n opacity: 1; \n }\n 70% { transform: translate(-50%, -50%) scale(0.95); }\n 100% { \n transform: translate(-50%, -50%) scale(1); \n opacity: 1; \n stroke-dashoffset: 0; \n }\n}\n\n/* Add stroke-dasharray to the tick path via JS or CSS for draw effect */\n.success-tick path {\n stroke-dasharray: 60;\n stroke-dashoffset: 60;\n animation: drawTick 0.8s ease-out 0.5s forwards;\n}\n\n@keyframes drawTick {\n to { stroke-dashoffset: 0; }\n}\n\n/* Fullscreen White Loader */\n#loader {\n position: fixed;\n inset: 0;\n width: 100%;\n height: 100%;\n background: #ffffff;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 999999;\n}\n\n.loader-wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 18px;\n}\n\n.spinner {\n width: 68px;\n height: 68px;\n border: 6px solid rgba(0, 0, 0, 0.12);\n border-top: 6px solid #111111;\n border-radius: 50%;\n animation: spin 0.9s linear infinite;\n}\n\n.loader-text {\n color: #111111;\n font-size: 20px;\n font-weight: 600;\n text-align: center;\n margin: 0;\n font-family: Arial, sans-serif;\n}\n\n/* Tablet */\n@media (max-width: 768px) {\n .spinner {\n width: 56px;\n height: 56px;\n }\n\n .loader-text {\n font-size: 17px;\n }\n}\n\n/* Mobile */\n@media (max-width: 480px) {\n .spinner {\n width: 48px;\n height: 48px;\n border-width: 5px;\n }\n\n .loader-text {\n font-size: 15px;\n }\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n ");this.styleTag=document.createElement("style"),this.styleTag.type="text/css",this.styleTag.innerText=e,document.head.appendChild(this.styleTag)}}],t&&c(e.prototype,t),n&&c(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t,n,a,r,d}();const u=t.A;export{u as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "accurafaceplugin",
3
- "version": "1.0.31",
3
+ "version": "1.0.32",
4
4
  "main": "./dist/accuramain.js",
5
5
  "module": "./dist/accuramain.js",
6
6
  "scripts": {