Use worker without external file

This commit is contained in:
Christoph Oberhofer
2015-01-18 13:55:18 +01:00
parent 63993dfa8c
commit b7b4711a7e
8 changed files with 107 additions and 5136 deletions
+50 -2
View File
@@ -478,9 +478,13 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
}
function initWorker(cb) {
var tmpData;
var tmpData,
blobURL;
blobURL = generateWorkerBlob();
_worker = new Worker(blobURL);
URL.revokeObjectURL(blobURL);
_worker = new Worker('../src/worker_locator.js');
tmpData = _inputImageWrapper.data;
_inputImageWrapper.data = null; // do not send the data along
_worker.postMessage({cmd: 'init', inputImageWrapper: _inputImageWrapper, config: _config});
@@ -496,6 +500,50 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
};
}
function generateWorkerBlob() {
var blob,
quaggaAbsoluteUrl,
scripts = document.getElementsByTagName('script'),
regex = new RegExp('\/' + _config.scriptName + '$');
quaggaAbsoluteUrl = Array.prototype.slice.apply(scripts).filter(function(script) {
return script.src && script.src.match(regex);
}).map(function(script) {
return script.src;
})[0];
/* jshint ignore:start */
blob = new Blob(['(' +
(function(scriptUrl){
importScripts(scriptUrl);
var inputImageWrapper,
config,
Locator = Quagga.Locator;
self.onmessage = function(e) {
if (e.data.cmd === 'init') {
inputImageWrapper = e.data.inputImageWrapper;
config = e.data.config;
config.useWorker = false;
Locator.init(inputImageWrapper, config, function() {
self.postMessage({'event': 'initialized'});
});
} else if (e.data.cmd === 'locate') {
inputImageWrapper.data = new Uint8Array(e.data.buffer);
Locator.locate(function(result) {
self.postMessage({'event': 'located', result: result, buffer : inputImageWrapper.data}, [inputImageWrapper.data.buffer]);
});
}
};
}).toString() + ')("' + quaggaAbsoluteUrl + '");'
], {type : 'text/javascript'});
/* jshint ignore:end */
return window.URL.createObjectURL(blob);
}
return {
init : function(inputImageWrapper, config, cb) {
_config = config;
+1
View File
@@ -26,6 +26,7 @@ define(function(){
locator: {
halfSample: true,
useWorker: true,
scriptName: 'quagga.js',
showCanvas: false,
showPatches: false,
showFoundPatches: false,
+2 -1
View File
@@ -224,6 +224,7 @@ function(Code128Reader, EANReader, InputStream, ImageWrapper, BarcodeLocator, Ba
Reader: {
EANReader : EANReader,
Code128Reader : Code128Reader
}
},
Locator: BarcodeLocator
};
});
-23
View File
@@ -1,23 +0,0 @@
/* jshint undef: true, unused: true, browser:true, devel: true */
/* global importScripts, self, Locator */
importScripts('../dist/locator.js');
var inputImageWrapper,
config;
self.onmessage = function(e) {
if (e.data.cmd === 'init') {
inputImageWrapper = e.data.inputImageWrapper;
config = e.data.config;
config.useWorker = false;
Locator.init(inputImageWrapper, config, function() {
self.postMessage({'event': 'initialized'});
});
} else if (e.data.cmd === 'locate') {
inputImageWrapper.data = new Uint8Array(e.data.buffer);
Locator.locate(function(result) {
self.postMessage({'event': 'located', result: result, buffer : inputImageWrapper.data}, [inputImageWrapper.data.buffer]);
});
}
};