From 63993dfa8c7932a2e6b2e4a16665cf7c9cf60533 Mon Sep 17 00:00:00 2001
From: Christoph Oberhofer
Date: Sun, 18 Jan 2015 11:56:34 +0100
Subject: [PATCH] Web-Worker now working for live-streams. Passing config to
worker
---
dist/locator.js | 17 ++++++++---------
dist/quagga.js | 34 +++++++++++++++++-----------------
example/live_w_locator.html | 1 +
example/live_w_locator.js | 6 ++++++
example/static_images.js | 2 +-
src/barcode_locator.js | 17 ++++++++---------
src/config.js | 1 +
src/quagga.js | 16 ++++++++--------
src/worker_locator.js | 36 ++++++++++--------------------------
9 files changed, 60 insertions(+), 70 deletions(-)
diff --git a/dist/locator.js b/dist/locator.js
index 53196b7..c823c80 100644
--- a/dist/locator.js
+++ b/dist/locator.js
@@ -4528,7 +4528,6 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
_patchLabelGrid,
_imageToPatchGrid,
_binaryImageWrapper,
- _halfSample = true,
_patchSize,
_canvasContainer = {
ctx : {
@@ -4549,7 +4548,7 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
function initBuffers() {
var skeletonImageData;
- if (_halfSample) {
+ if (_config.halfSample) {
_currentImageWrapper = new ImageWrapper({
x : _inputImageWrapper.size.x / 2 | 0,
y : _inputImageWrapper.size.y / 2 | 0
@@ -4559,8 +4558,8 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
}
_patchSize = {
- x : 16 * ( _halfSample ? 1 : 2),
- y : 16 * ( _halfSample ? 1 : 2)
+ x : 16 * ( _config.halfSample ? 1 : 2),
+ y : 16 * ( _config.halfSample ? 1 : 2)
};
_numPatches.x = _currentImageWrapper.size.x / _patchSize.x | 0;
@@ -4663,7 +4662,7 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
ImageDebug.drawPath(box, {x: 0, y: 1}, _canvasContainer.ctx.binary, {color: '#ff0000', lineWidth: 2});
}
- scale = _halfSample ? 2 : 1;
+ scale = _config.halfSample ? 2 : 1;
// reverse rotation;
transMat = mat2.inverse(transMat);
for ( j = 0; j < 4; j++) {
@@ -4998,7 +4997,7 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
_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});
+ _worker.postMessage({cmd: 'init', inputImageWrapper: _inputImageWrapper, config: _config});
_inputImageWrapper.data = tmpData;
_worker.onmessage = function(e) {
if (e.data.event === 'initialized') {
@@ -5012,9 +5011,9 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
}
return {
- init : function(config, data, cb) {
+ init : function(inputImageWrapper, config, cb) {
_config = config;
- _inputImageWrapper = data.inputImageWrapper;
+ _inputImageWrapper = inputImageWrapper;
// 1. check config for web-worker
if (_config.useWorker) {
@@ -5034,7 +5033,7 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
_locatedCb = cb;
_worker.postMessage({cmd: 'locate', buffer: _inputImageWrapper.data}, [_inputImageWrapper.data.buffer]);
} else {
- if (_halfSample) {
+ if (_config.halfSample) {
CVUtils.halfSample(_inputImageWrapper, _currentImageWrapper);
}
diff --git a/dist/quagga.js b/dist/quagga.js
index d7df581..964aa47 100644
--- a/dist/quagga.js
+++ b/dist/quagga.js
@@ -5709,7 +5709,6 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
_patchLabelGrid,
_imageToPatchGrid,
_binaryImageWrapper,
- _halfSample = true,
_patchSize,
_canvasContainer = {
ctx : {
@@ -5730,7 +5729,7 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
function initBuffers() {
var skeletonImageData;
- if (_halfSample) {
+ if (_config.halfSample) {
_currentImageWrapper = new ImageWrapper({
x : _inputImageWrapper.size.x / 2 | 0,
y : _inputImageWrapper.size.y / 2 | 0
@@ -5740,8 +5739,8 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
}
_patchSize = {
- x : 16 * ( _halfSample ? 1 : 2),
- y : 16 * ( _halfSample ? 1 : 2)
+ x : 16 * ( _config.halfSample ? 1 : 2),
+ y : 16 * ( _config.halfSample ? 1 : 2)
};
_numPatches.x = _currentImageWrapper.size.x / _patchSize.x | 0;
@@ -5844,7 +5843,7 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
ImageDebug.drawPath(box, {x: 0, y: 1}, _canvasContainer.ctx.binary, {color: '#ff0000', lineWidth: 2});
}
- scale = _halfSample ? 2 : 1;
+ scale = _config.halfSample ? 2 : 1;
// reverse rotation;
transMat = mat2.inverse(transMat);
for ( j = 0; j < 4; j++) {
@@ -6179,7 +6178,7 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
_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});
+ _worker.postMessage({cmd: 'init', inputImageWrapper: _inputImageWrapper, config: _config});
_inputImageWrapper.data = tmpData;
_worker.onmessage = function(e) {
if (e.data.event === 'initialized') {
@@ -6193,9 +6192,9 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
}
return {
- init : function(config, data, cb) {
+ init : function(inputImageWrapper, config, cb) {
_config = config;
- _inputImageWrapper = data.inputImageWrapper;
+ _inputImageWrapper = inputImageWrapper;
// 1. check config for web-worker
if (_config.useWorker) {
@@ -6215,7 +6214,7 @@ function(ImageWrapper, CVUtils, Rasterizer, Tracer, skeletonizer, ArrayHelper, I
_locatedCb = cb;
_worker.postMessage({cmd: 'locate', buffer: _inputImageWrapper.data}, [_inputImageWrapper.data.buffer]);
} else {
- if (_halfSample) {
+ if (_config.halfSample) {
CVUtils.halfSample(_inputImageWrapper, _currentImageWrapper);
}
@@ -6858,6 +6857,7 @@ define('config',[],function(){
]
},
locator: {
+ halfSample: true,
useWorker: true,
showCanvas: false,
showPatches: false,
@@ -7210,7 +7210,7 @@ function(Code128Reader, EANReader, InputStream, ImageWrapper, BarcodeLocator, Ba
vec2.create([_inputStream.getWidth() - 20, _inputStream.getHeight() / 2 + 100]),
vec2.create([_inputStream.getWidth() - 20, _inputStream.getHeight() / 2 - 100])
];
- BarcodeLocator.init(_config.locator, {inputImageWrapper : _inputImageWrapper}, cb);
+ BarcodeLocator.init(_inputImageWrapper, _config.locator, cb);
}
function getBoundingBoxes(cb) {
@@ -7221,14 +7221,12 @@ function(Code128Reader, EANReader, InputStream, ImageWrapper, BarcodeLocator, Ba
}
}
- function update() {
+ function update(cb) {
var result;
if (_framegrabber.grab()) {
_canvasContainer.ctx.overlay.clearRect(0, 0, _inputImageWrapper.size.x, _inputImageWrapper.size.y);
- console.time("getBoundingBoxes");
getBoundingBoxes(function(boxes) {
- console.timeEnd("getBoundingBoxes");
// attach data back to grabber
_framegrabber.attachData(_inputImageWrapper.data);
if (boxes) {
@@ -7237,6 +7235,7 @@ function(Code128Reader, EANReader, InputStream, ImageWrapper, BarcodeLocator, Ba
Events.publish("detected", result.codeResult.code);
}
}
+ return cb();
});
}
}
@@ -7245,10 +7244,11 @@ function(Code128Reader, EANReader, InputStream, ImageWrapper, BarcodeLocator, Ba
_stopped = false;
( function frame() {
if (!_stopped) {
- if (_config.inputStream.type == "LiveStream") {
- window.requestAnimFrame(frame);
- }
- update();
+ update(function() {
+ if (_config.inputStream.type == "LiveStream") {
+ window.requestAnimFrame(frame);
+ }
+ });
}
}());
}
diff --git a/example/live_w_locator.html b/example/live_w_locator.html
index 10ef63f..9849539 100644
--- a/example/live_w_locator.html
+++ b/example/live_w_locator.html
@@ -27,6 +27,7 @@
It works best if your camera has built-in auto-focus.
+