|
|
|
/*! quagga 2015-07-28 */
|
|
|
|
!function(a,b){var c=b.toString();"undefined"!=typeof module?module.exports=b(c):a.Quagga=b(c)}(this,function(a){/**
|
|
|
|
* @license almond 0.2.9 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.
|
|
|
|
* Available via the MIT or new BSD license.
|
|
|
|
* see: http://github.com/jrburke/almond for details
|
|
|
|
*/
|
|
|
|
var b,c,d;!function(a){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(n=n.slice(0,n.length-1),a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.concat(a),k=0;k<a.length;k+=1)if(m=a[k],"."===m)a.splice(k,1),k-=1;else if(".."===m){if(1===k&&(".."===a[2]||".."===a[0]))break;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(b,c){return function(){return n.apply(a,v.call(arguments,0).concat([b,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(b){if(e(r,b)){var c=r[b];delete r[b],t[b]=!0,m.apply(a,c)}if(!e(q,b)&&!e(t,b))throw new Error("No "+b);return q[b]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(b,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||b,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n<c.length;n+=1)if(m=o(c[n],f),k=m.f,"require"===k)u[n]=p.require(b);else if("exports"===k)u[n]=p.exports(b),s=!0;else if("module"===k)h=u[n]=p.module(b);else if(e(q,k)||e(r,k)||e(t,k))u[n]=j(k);else{if(!m.p)throw new Error(b+" missing "+k);m.p.load(m.n,g(f,!0),i(k),{}),u[n]=q[k]}l=d?d.apply(q[b],u):void 0,b&&(h&&h.exports!==a&&h.exports!==q[b]?q[b]=h.exports:l===a&&s||(q[b]=l))}else b&&(q[b]=d)},b=c=n=function(b,c,d,e,f){if("string"==typeof b)return p[b]?p[b](c):j(o(b,c).f);if(!b.splice){if(s=b,s.deps&&n(s.deps,s.callback),!c)return;c.splice?(b=c,c=d,d=null):b=a}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?m(a,b,c,d):setTimeout(function(){m(a,b,c,d)},4),n},n.config=function(a){return n(a)},b._defined=q,d=function(a,b,c){b.splice||(c=b,b=[]),e(q,a)||e(r,a)||(r[a]=[a,b,c])},d.amd={jQuery:!0}}(),d("almond",function(){}),d("image_loader",[],function(){"use strict";function a(a,b){a.onload=function(){b.loaded(this)}}var b={};return b.load=function(b,c,d,e,f){var g,h,i,j=new Array(e),k=new Array(j.length);if(f===!1)j[0]=b;else for(g=0;g<j.length;g++)i=d+g,j[g]=b+"image-"+("00"+i).slice(-3)+".jpg";for(k.notLoaded=[],k.addImage=function(a){k.notLoaded.push(a)},k.loaded=function(a){for(var b=k.notLoaded,d=0;d<b.length;d++)if(b[d]==a){b.splice(d,1);for(var e=0;e<j.length;e++){var f=j[e].substr(j[e].lastIndexOf("/"));if(-1!=a.src.lastIndexOf(f)){k[e]=a;break}}break}0===b.length&&(console.log("Images loaded"),c.apply(null,[k]))},g=0;g<j.length;g++)h=new Image,k.addImage(h),a(h,k),h.src=j[g]},b}),d("input_stream",["image_loader"],function(a){"use strict";var b={};return b.createVideoStream=function(a){function b(){var b=a.videoWidth,e=a.videoHeight;c=f.size?b/e>1?f.size:Math.floor(b/e*f.size):b,d=f.size?b/e>1?Math.floor(e/b*f.size):f.size:e,j.x=c,j.y=d}var c,d,e={},f=null,g=["canrecord","ended"],h={},i={x:0,y:0},j={x:0,y:0};return e.getRealWidth=function(){return a.videoWidth},e.getRealHeight=function(){return a.videoHeight},e.getWidth=function(){return c},e.getHeight=function(){return d},e.setWidth=function(a){c=a},e.setHeight=function(a){d=a},e.setInputStream=function(b){f=b,a.src="undefined"!=typeof b.src?b.src:""},e.ended=function(){return a.ended},e.getConfig=function(){return f},e.setAttribut
|
|
|
|
|
|
|
|
return b>0&&(c=Math.abs(a[b]-m)>Math.abs(a[b-1]-m)?a[b-1]:a[b]),m/c<i[k+1]/i[k]&&m/c>i[k-1]/i[k]?{x:c,y:c}:null}var d,e=this._computeDivisors(b.x),f=this._computeDivisors(b.y),g=Math.max(b.x,b.y),h=this._computeIntersection(e,f),i=[8,10,15,20,32,60,80],j={"x-small":5,small:4,medium:3,large:2,"x-large":1},k=j[a]||j.medium,l=i[k],m=Math.floor(g/l);return d=c(h),d||(d=c(this._computeDivisors(g)),d||(d=c(this._computeDivisors(m*l)))),d},d._parseCSSDimensionValues=function(a){var b={value:parseFloat(a),unit:(a.indexOf("%")===a.length-1,"%")};return b},d._dimensionsConverters={top:function(a,b){return"%"===a.unit?Math.floor(b.height*(a.value/100)):void 0},right:function(a,b){return"%"===a.unit?Math.floor(b.width-b.width*(a.value/100)):void 0},bottom:function(a,b){return"%"===a.unit?Math.floor(b.height-b.height*(a.value/100)):void 0},left:function(a,b){return"%"===a.unit?Math.floor(b.width*(a.value/100)):void 0}},d.computeImageArea=function(a,b,c){var e={width:a,height:b},f=Object.keys(c).reduce(function(a,b){var f=c[b],g=d._parseCSSDimensionValues(f),h=d._dimensionsConverters[b](g,e);return a[b]=h,a},{});return{sx:f.left,sy:f.top,sw:f.right-f.left,sh:f.bottom-f.top}},d}),d("image_wrapper",["subImage","cv_utils","array_helper"],function(a,b,c){"use strict";function d(a,b,d,e){b?this.data=b:d?(this.data=new d(a.x*a.y),d===Array&&e&&c.init(this.data,0)):(this.data=new Uint8Array(a.x*a.y),Uint8Array===Array&&e&&c.init(this.data,0)),this.size=a}return d.prototype.inImageWithBorder=function(a,b){return a.x>=b&&a.y>=b&&a.x<this.size.x-b&&a.y<this.size.y-b},d.transform=function(a,b,c,e,f){var g,h,k,l=b.size.x,m=b.size.y,n=a.size.x,o=a.size.y,p=j.create([c[0],c[2]]),q=j.create([c[1],c[3]]),r=0,s=j.subtract(e,i.xVec2(c,f,j.create()),j.create()),t=s[0],u=s[1],v=t,w=u,x=d.sample;p[0]<0?t+=l*p[0]:v+=l*p[0],q[0]<0?t+=m*q[0]:v+=m*q[0],p[1]<0?u+=l*p[1]:w+=l*p[1],q[1]<0?u+=m*q[1]:w+=m*q[1];var y=j.subtract(q,j.scale(p,l,j.create()),j.create());if(t>=0&&u>=0&&n-1>v&&o-1>w){for(g=s,h=0;m>h;++h,j.add(g,y))for(k=0;l>k;++k,j.add(g,p))b.set(k,h,x(a,g[0],g[1]));return 0}var z=n-1,A=o-1,B=0;for(g=s,h=0;m>h;++h,j.add(g,y))for(k=0;l>k;++k,j.add(g,p))0<=g[0]&&0<=g[1]&&g[0]<z&&g[1]<A?b.set(k,h,x(a,g[0],g[1])):(b.set(k,h,r),++B);return B},d.sample=function(a,b,c){var d=Math.floor(b),e=Math.floor(c),f=a.size.x,g=e*a.size.x+d,h=a.data[g+0],i=a.data[g+1],j=a.data[g+f],k=a.data[g+f+1],l=h-i;b-=d,c-=e;var m=Math.floor(b*(c*(l-j+k)-l)+c*(j-h)+h);return m},d.clearArray=function(a){for(var b=a.length;b--;)a[b]=0},d.prototype.subImage=function(b,c){return new a(b,c,this)},d.prototype.subImageAsCopy=function(a,b){var c,d,e=a.size.y,f=a.size.x;for(c=0;f>c;c++)for(d=0;e>d;d++)a.data[d*f+c]=this.data[(b.y+d)*this.size.x+b.x+c]},d.prototype.copyTo=function(a){for(var b=this.data.length,c=this.data,d=a.data;b--;)d[b]=c[b]},d.prototype.get=function(a,b){return this.data[b*this.size.x+a]},d.prototype.getSafe=function(a,b){var c;if(!this.indexMapping){for(this.indexMapping={x:[],y:[]},c=0;c<this.size.x;c++)this.indexMapping.x[c]=c,this.indexMapping.x[c+this.size.x]=c;for(c=0;c<this.size.y;c++)this.indexMapping.y[c]=c,this.indexMapping.y[c+this.size.y]=c}return this.data[this.indexMapping.y[b+this.size.y]*this.size.x+this.indexMapping.x[a+this.size.x]]},d.prototype.set=function(a,b,c){return this.data[b*this.size.x+a]=c,this},d.prototype.zeroBorder=function(){var a,b=this.size.x,c=this.size.y,d=this.data;for(a=0;b>a;a++)d[a]=d[(c-1)*b+a]=0;for(a=1;c-1>a;a++)d[a*b]=d[a*b+(b-1)]=0},d.prototype.invert=function(){for(var a=this.data,b=a.length;b--;)a[b]=a[b]?0:1},d.prototype.convolve=function(a){var b,c,d,e,f=a.length/2|0,g=0;for(c=0;c<this.size.y;c++)for(b=0;b<this.size.x;b++){for(g=0,e=-f;f>=e;e++)for(d=-f;f>=d;d++)g+=a[e+f][d+f]*this.getSafe(b+d,c+e);this.data[c*this.size.x+b]=g}},d.prototype.moments=function(a){var b,c,d,e,f,g,h,i,k,l,m,n,o=this.data,p=this.size.y,q=this.size.x,r=[],s=[],t=Math.PI,u=t/4;if(0>=a)return s;for(f=0;a>f;f++)r[f]={m00:0,m01:0,m10:0,m11:0,m02:0,m20:0,theta:0,rad:0};for(c=0;p>c;c++)for(e=c*c,b=0;q>b;b++)d=o[c*q+b],d>0&&(g=r[d-1],g.m00+=1,g.m01+=c,g
|
|
|
|
return a}),d("image_debug",[],function(){"use strict";return{drawRect:function(a,b,c,d){c.strokeStyle=d.color,c.fillStyle=d.color,c.lineWidth=1,c.beginPath(),c.strokeRect(a.x,a.y,b.x,b.y)},drawPath:function(a,b,c,d){c.strokeStyle=d.color,c.fillStyle=d.color,c.lineWidth=d.lineWidth,c.beginPath(),c.moveTo(a[0][b.x],a[0][b.y]);for(var e=1;e<a.length;e++)c.lineTo(a[e][b.x],a[e][b.y]);c.closePath(),c.stroke()},drawImage:function(a,b,c){var d,e=c.getImageData(0,0,b.x,b.y),f=e.data,g=a.length,h=f.length;if(h/g!==4)return!1;for(;g--;)d=a[g],f[--h]=255,f[--h]=d,f[--h]=d,f[--h]=d;return c.putImageData(e,0,0),!0}}}),d("barcode_locator",["image_wrapper","cv_utils","rasterizer","tracer","skeletonizer","array_helper","image_debug"],function(a,b,c,d,e,f,g){function h(){var c;v=u.halfSample?new a({x:E.size.x/2|0,y:E.size.y/2|0}):E,D=b.calculatePatchSize(u.patchSize,v.size),H.x=v.size.x/D.x|0,H.y=v.size.y/D.y|0,C=new a(v.size,void 0,Uint8Array,!1),y=new a(D,void 0,Array,!0),c=new ArrayBuffer(65536),x=new a(D,new Uint8Array(c,0,D.x*D.y)),w=new a(D,new Uint8Array(c,D.x*D.y*3,D.x*D.y),void 0,!0),F=e(I,{size:D.x},c),B=new a({x:v.size.x/x.size.x|0,y:v.size.y/x.size.y|0},void 0,Array,!0),z=new a(B.size,void 0,void 0,!0),A=new a(B.size,void 0,Int32Array,!0)}function k(){u.useWorker||"undefined"==typeof document||(G.dom.binary=document.createElement("canvas"),G.dom.binary.className="binaryBuffer",u.showCanvas===!0&&document.querySelector("#debug").appendChild(G.dom.binary),G.ctx.binary=G.dom.binary.getContext("2d"),G.dom.binary.width=C.size.x,G.dom.binary.height=C.size.y)}function l(a){var b,c,d,e,f,h,k,l=C.size.x,m=C.size.y,n=-C.size.x,o=-C.size.y;for(b=0,c=0;c<a.length;c++)e=a[c],b+=e.rad,u.showPatches&&g.drawRect(e.pos,x.size,G.ctx.binary,{color:"red"});for(b/=a.length,b=(180*b/Math.PI+90)%180-90,0>b&&(b+=180),b=(180-b)*Math.PI/180,f=i.create([Math.cos(b),-Math.sin(b),Math.sin(b),Math.cos(b)]),c=0;c<a.length;c++){for(e=a[c],d=0;4>d;d++)i.xVec2(f,e.box[d]);u.boxFromPatches.showTransformed&&g.drawPath(e.box,{x:0,y:1},G.ctx.binary,{color:"#99ff00",lineWidth:2})}for(c=0;c<a.length;c++)for(e=a[c],d=0;4>d;d++)e.box[d][0]<l&&(l=e.box[d][0]),e.box[d][0]>n&&(n=e.box[d][0]),e.box[d][1]<m&&(m=e.box[d][1]),e.box[d][1]>o&&(o=e.box[d][1]);for(h=[[l,m],[n,m],[n,o],[l,o]],u.boxFromPatches.showTransformedBox&&g.drawPath(h,{x:0,y:1},G.ctx.binary,{color:"#ff0000",lineWidth:2}),k=u.halfSample?2:1,f=i.inverse(f),d=0;4>d;d++)i.xVec2(f,h[d]);for(u.boxFromPatches.showBB&&g.drawPath(h,{x:0,y:1},G.ctx.binary,{color:"#ff0000",lineWidth:2}),d=0;4>d;d++)j.scale(h[d],k);return h}function m(){b.otsuThreshold(v,C),C.zeroBorder(),u.showCanvas&&C.show(G.dom.binary,255)}function n(){var a,b,d,e,h,i,j,k,l=[];for(a=0;a<H.x;a++)for(b=0;b<H.y;b++)d=x.size.x*a,e=x.size.y*b,r(d,e),w.zeroBorder(),f.init(y.data,0),i=c.create(w,y),j=i.rasterize(0),u.showLabels&&y.overlay(G.dom.binary,Math.floor(360/j.count),{x:d,y:e}),h=y.moments(j.count),l=l.concat(s(h,[a,b],d,e));if(u.showFoundPatches)for(a=0;a<l.length;a++)k=l[a],g.drawRect(k.pos,x.size,G.ctx.binary,{color:"#99ff00",lineWidth:2});return l}function o(a){var b,c,d=[],e=[];for(b=0;a>b;b++)d.push(0);for(c=A.data.length;c--;)A.data[c]>0&&d[A.data[c]-1]++;return d=d.map(function(a,b){return{val:a,label:b+1}}),d.sort(function(a,b){return b.val-a.val}),e=d.filter(function(a){return a.val>=5})}function p(a,c){var d,e,f,h,i,j=[],k=[],m=[0,1,1],n=[0,0,0];for(d=0;d<a.length;d++){for(f=A.data.length,j.length=0;f--;)A.data[f]===a[d].label&&(h=B.data[f],j.push(h));if(i=l(j),i&&(k.push(i),u.showRemainingPatchLabels))for(e=0;e<j.length;e++)h=j[e],m[0]=a[d].label/(c+1)*360,b.hsv2rgb(m,n),g.drawRect(h.pos,x.size,G.ctx.binary,{color:"rgb("+n.join(",")+")",lineWidth:2})}return k}function q(a){var c=b.cluster(a,.9),d=b.topGeneric(c,1,function(a){return a.getPoints().length}),e=[],f=[];if(1===d.length){e=d[0].item.getPoints();for(var g=0;g<e.length;g++)f.push(e[g].point)}return f}function r(a,c){C.subImageAsCopy(x,b.imageRef(a,c)),F.skeletonize(),u.showSkeleton&&w.overlay(G.dom.binary,360,b.imageRef(a,c))}function s(a,b,c,d){var e,f,g,h,i=0,k=[],l=[],m=M
|
|
|
|
o.dom.pattern.className="patternBuffer",a&&a.appendChild(o.dom.pattern)),o.ctx.pattern=o.dom.pattern.getContext("2d"),o.dom.overlay=document.querySelector("canvas.drawingBuffer"),o.dom.overlay&&(o.ctx.overlay=o.dom.overlay.getContext("2d"))}}function f(){c.readers.forEach(function(a){var b,c={};"object"==typeof a?(b=a.format,c=a.config):"string"==typeof a&&(b=a),p.push(new l[b](c))}),console.log("Registered Readers: "+p.map(function(a){return JSON.stringify({format:a.FORMAT,config:a.config})}).join(", "))}function g(){if("undefined"!=typeof document){var a,b=[{node:o.dom.frequency,prop:c.showFrequency},{node:o.dom.pattern,prop:c.showPattern}];for(a=0;a<b.length;a++)b[a].prop===!0?b[a].node.style.display="block":b[a].node.style.display="none"}}function h(a,b,c){function e(c){var d={y:c*Math.sin(b),x:c*Math.cos(b)};a[0].y-=d.y,a[0].x-=d.x,a[1].y+=d.y,a[1].x+=d.x}for(e(c);c>1&&(!d.inImageWithBorder(a[0],0)||!d.inImageWithBorder(a[1],0));)c-=Math.ceil(c/2),e(-c);return a}function i(a){return[{x:(a[1][0]-a[0][0])/2+a[0][0],y:(a[1][1]-a[0][1])/2+a[0][1]},{x:(a[3][0]-a[2][0])/2+a[2][0],y:(a[3][1]-a[2][1])/2+a[2][1]}]}function j(e){var f,g=null,h=a.getBarcodeLine(d,e[0],e[1]);for(c.showFrequency&&(b.drawPath(e,{x:"x",y:"y"},o.ctx.overlay,{color:"red",lineWidth:3}),a.debug.printFrequency(h.line,o.dom.frequency)),a.toBinaryLine(h),c.showPattern&&a.debug.printPattern(h.line,o.dom.pattern),f=0;f<p.length&&null===g;f++)g=p[f].decodePattern(h.line);return null===g?null:{codeResult:g,barcodeLine:h}}function k(a,b,c){var d,e,f,g=Math.sqrt(Math.pow(a[1][0]-a[0][0],2)+Math.pow(a[1][1]-a[0][1],2)),h=16,i=null,k=Math.sin(c),l=Math.cos(c);for(d=1;h>d&&null===i;d++)e=g/h*d*(d%2===0?-1:1),f={y:e*k,x:e*l},b[0].y+=f.x,b[0].x-=f.y,b[1].y+=f.x,b[1].x-=f.y,i=j(b);return i}function m(a){return Math.sqrt(Math.pow(Math.abs(a[1].y-a[0].y),2)+Math.pow(Math.abs(a[1].x-a[0].x),2))}function n(a){var d,e,f,g,l=o.ctx.overlay;return c.drawBoundingBox&&l&&b.drawPath(a,{x:0,y:1},l,{color:"blue",lineWidth:2}),d=i(a),g=m(d),e=Math.atan2(d[1].y-d[0].y,d[1].x-d[0].x),d=h(d,e,Math.floor(.1*g)),null===d?null:(f=j(d),null===f&&(f=k(a,d,e)),null===f?null:(f&&c.drawScanline&&l&&b.drawPath(d,{x:"x",y:"y"},l,{color:"red",lineWidth:3}),{codeResult:f.codeResult,line:d,angle:e,pattern:f.barcodeLine.line,threshold:f.barcodeLine.threshold}))}var o={ctx:{frequency:null,pattern:null,overlay:null},dom:{frequency:null,pattern:null,overlay:null}},p=[];return e(),f(),g(),{decodeFromBoundingBox:function(a){return n(a)},decodeFromBoundingBoxes:function(a){var b,c;for(b=0;b<a.length;b++)if(c=n(a[b]),c&&c.codeResult)return c.box=a[b],c},setReaders:function(a){c.readers=a,p.length=0,f()}}}};return m}),d("frame_grabber",["cv_utils"],function(a){"use strict";var b={};return b.create=function(b,c){var d,e={},f=b.getConfig(),g=a.imageRef(b.getRealWidth(),b.getRealHeight()),h=b.getCanvasSize(),i=a.imageRef(b.getWidth(),b.getHeight()),j=b.getTopRight(),k=j.x,l=j.y,m=null,n=null;return d=c?c:document.createElement("canvas"),d.width=h.x,d.height=h.y,m=d.getContext("2d"),n=new Uint8Array(i.x*i.y),console.log("FrameGrabber",JSON.stringify({size:i,topRight:j,videoSize:g,canvasSize:h})),e.attachData=function(a){n=a},e.getData=function(){return n},e.grab=function(){var c,d=f.halfSample,e=b.getFrame();return e?(m.drawImage(e,0,0,h.x,h.y),c=m.getImageData(k,l,i.x,i.y).data,d?a.grayAndHalfSampleFromCanvasData(c,i,n):a.computeGray(c,n,f),!0):!1},e.getSize=function(){return i},e},b}),d("config",[],function(){var a={inputStream:{name:"Live",type:"LiveStream",constraints:{width:640,height:480,minAspectRatio:0,maxAspectRatio:100,facing:"environment"},area:{top:"0%",right:"0%",left:"0%",bottom:"0%"},singleChannel:!1},tracking:!1,debug:!1,controls:!1,locate:!0,numOfWorkers:4,visual:{show:!0},decoder:{drawBoundingBox:!1,showFrequency:!1,drawScanline:!1,showPattern:!1,readers:["code_128_reader"]},locator:{halfSample:!0,patchSize:"medium",showCanvas:!1,showPatches:!1,showFoundPatches:!1,showSkeleton:!1,showLabels:!1,showPatchLabels:!1,showRemainingPatchLabels:!1,boxFromPatches:{showTransformed:!1,showTransformed
|