mirror of
https://github.com/serratus/quaggaJS.git
synced 2026-08-13 05:31:37 +08:00
Make web-workers work independently
This commit is contained in:
committed by
Christoph Oberhofer
parent
633eabe86c
commit
12a39e28e5
@@ -18,7 +18,7 @@ module.exports = {
|
|||||||
singleChannel: false // true: only the red color-channel is read
|
singleChannel: false // true: only the red color-channel is read
|
||||||
},
|
},
|
||||||
locate: true,
|
locate: true,
|
||||||
numOfWorkers: 0,
|
numOfWorkers: 1,
|
||||||
decoder: {
|
decoder: {
|
||||||
readers: [
|
readers: [
|
||||||
'code_128_reader'
|
'code_128_reader'
|
||||||
|
|||||||
@@ -4,6 +4,21 @@ import {
|
|||||||
computeGray
|
computeGray
|
||||||
} from '../common/cv_utils';
|
} from '../common/cv_utils';
|
||||||
|
|
||||||
|
function adjustCanvasSize(canvas, targetSize) {
|
||||||
|
if (canvas.width !== targetSize.x) {
|
||||||
|
if (ENV.development) {
|
||||||
|
console.log("WARNING: canvas-size needs to be adjusted");
|
||||||
|
}
|
||||||
|
canvas.width = targetSize.x;
|
||||||
|
}
|
||||||
|
if (canvas.height !== targetSize.y) {
|
||||||
|
if (ENV.development) {
|
||||||
|
console.log("WARNING: canvas-size needs to be adjusted");
|
||||||
|
}
|
||||||
|
canvas.height = targetSize.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var FrameGrabber = {};
|
var FrameGrabber = {};
|
||||||
|
|
||||||
FrameGrabber.create = function(inputStream, canvas) {
|
FrameGrabber.create = function(inputStream, canvas) {
|
||||||
@@ -56,6 +71,7 @@ FrameGrabber.create = function(inputStream, canvas) {
|
|||||||
frame = inputStream.getFrame(),
|
frame = inputStream.getFrame(),
|
||||||
ctxData;
|
ctxData;
|
||||||
if (frame) {
|
if (frame) {
|
||||||
|
adjustCanvasSize(_canvas, _canvasSize);
|
||||||
_ctx.drawImage(frame, 0, 0, _canvasSize.x, _canvasSize.y);
|
_ctx.drawImage(frame, 0, 0, _canvasSize.x, _canvasSize.y);
|
||||||
ctxData = _ctx.getImageData(_sx, _sy, _size.x, _size.y).data;
|
ctxData = _ctx.getImageData(_sx, _sy, _size.x, _size.y).data;
|
||||||
if (doHalfSample){
|
if (doHalfSample){
|
||||||
|
|||||||
+17
-9
@@ -8,6 +8,9 @@ import Config from './config/config';
|
|||||||
import {merge, pick, omitBy, isEmpty, omit} from 'lodash';
|
import {merge, pick, omitBy, isEmpty, omit} from 'lodash';
|
||||||
|
|
||||||
|
|
||||||
|
// scanner map
|
||||||
|
// Keep record of already created scanners for reuse?!
|
||||||
|
|
||||||
function fromImage(config, imageSrc, imageConfig) {
|
function fromImage(config, imageSrc, imageConfig) {
|
||||||
config =
|
config =
|
||||||
merge({
|
merge({
|
||||||
@@ -27,7 +30,7 @@ function fromImage(config, imageSrc, imageConfig) {
|
|||||||
{inputStream: imageConfig});
|
{inputStream: imageConfig});
|
||||||
|
|
||||||
console.log(config);
|
console.log(config);
|
||||||
const scanner = createScanner(config);
|
const scanner = createScanner();
|
||||||
return {
|
return {
|
||||||
addEventListener: (eventType, cb) => {
|
addEventListener: (eventType, cb) => {
|
||||||
scanner.decodeSingle(config, cb);
|
scanner.decodeSingle(config, cb);
|
||||||
@@ -106,22 +109,27 @@ function createApi(configuration = Config) {
|
|||||||
config(conf) {
|
config(conf) {
|
||||||
return createApi(merge({}, configuration, conf));
|
return createApi(merge({}, configuration, conf));
|
||||||
},
|
},
|
||||||
start: function() {
|
start() {
|
||||||
defaultScanner.start();
|
defaultScanner.start();
|
||||||
},
|
},
|
||||||
stop: function() {
|
stop() {
|
||||||
defaultScanner.stop();
|
defaultScanner.stop();
|
||||||
},
|
},
|
||||||
pause: function() {
|
pause() {
|
||||||
defaultScanner.pause();
|
defaultScanner.pause();
|
||||||
},
|
},
|
||||||
registerResultCollector: function(resultCollector) {
|
registerResultCollector(resultCollector) {
|
||||||
defaultScanner.registerResultCollector(resultCollector);
|
defaultScanner.registerResultCollector(resultCollector);
|
||||||
},
|
},
|
||||||
ImageWrapper: ImageWrapper,
|
getCanvas() {
|
||||||
ImageDebug: ImageDebug,
|
return defaultScanner.canvas;
|
||||||
ResultCollector: ResultCollector,
|
},
|
||||||
canvas: defaultScanner.canvas
|
ImageWrapper,
|
||||||
|
ImageDebug,
|
||||||
|
ResultCollector,
|
||||||
|
_worker: {
|
||||||
|
createScanner
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
export default createApi();
|
export default createApi();
|
||||||
|
|||||||
+5
-6
@@ -383,7 +383,8 @@ function createScanner() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var imageWrapper;
|
var imageWrapper,
|
||||||
|
scanner = Quagga._worker.createScanner();
|
||||||
|
|
||||||
self.onmessage = function(e) {
|
self.onmessage = function(e) {
|
||||||
if (e.data.cmd === 'init') {
|
if (e.data.cmd === 'init') {
|
||||||
@@ -393,13 +394,11 @@ function createScanner() {
|
|||||||
x: e.data.size.x,
|
x: e.data.size.x,
|
||||||
y: e.data.size.y
|
y: e.data.size.y
|
||||||
}, new Uint8Array(e.data.imageData));
|
}, new Uint8Array(e.data.imageData));
|
||||||
Quagga.init(config, ready, imageWrapper);
|
scanner.init(config, ready, imageWrapper);
|
||||||
Quagga.onProcessed(onProcessed);
|
scanner.onProcessed(onProcessed);
|
||||||
} else if (e.data.cmd === 'process') {
|
} else if (e.data.cmd === 'process') {
|
||||||
imageWrapper.data = new Uint8Array(e.data.imageData);
|
imageWrapper.data = new Uint8Array(e.data.imageData);
|
||||||
Quagga.start();
|
scanner.start();
|
||||||
} else if (e.data.cmd === 'setReaders') {
|
|
||||||
Quagga.setReaders(e.data.readers);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user