Merged multiple-results

pull/98/merge
Christoph Oberhofer 10 years ago
commit dad0b1daef

@ -10,7 +10,6 @@
"ecmaFeatures": {
"blockBindings": true,
"forOf": true,
"blockBindings": true,
"defaultParams": true,
"globalReturn": false,
"modules": true,
@ -59,7 +58,6 @@
"comma-style": [2, "last"],
"consistent-this": [1, "self"],
"eol-last": 0,
"new-cap": 0,
"new-parens": 2,
"no-array-constructor": 2,
"no-mixed-spaces-and-tabs": 2,

@ -361,7 +361,8 @@ options within the `decoder` are for debugging/visualization purposes only.
showPattern: false,
readers: [
'code_128_reader'
]
],
multiple: false
}
```
@ -384,6 +385,12 @@ more possible clashes, or false-positives. One should take care of the order
the readers are given, since some might return a value even though it is not
the correct type (EAN-13 vs. UPC-A).
The `multiple` property tells the decoder if it should continue decoding after
finding a valid barcode. If multiple is set to `true`, the results will be
returned as an array of result objects. Each object in the array will have a
`box`, and may have a `codeResult` depending on the success of decoding the
individual box.
The remaining properties `drawBoundingBox`, `showFrequency`, `drawScanline` and
`showPattern` are mostly of interest during debugging and visualization.

83
dist/quagga.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -11,8 +11,9 @@
"babel-loader": "^5.3.2",
"chai": "^3.4.1",
"core-js": "^1.2.1",
"eslint": "^1.10.3",
"grunt": "^0.4.5",
"grunt-cli": "0.1.13",
"grunt-cli": "^0.1.13",
"grunt-contrib-nodeunit": "^0.4.1",
"grunt-karma": "^0.12.1",
"isparta-loader": "^1.0.0",
@ -23,7 +24,7 @@
"karma-mocha": "~0.2.0",
"karma-phantomjs-launcher": "^0.2.1",
"karma-sinon": "^1.0.4",
"karma-sinon-chai": "~0.2.0",
"karma-sinon-chai": "^1.1.0",
"karma-source-map-support": "^1.1.0",
"karma-webpack": "^1.7.0",
"mocha": "^2.3.2",
@ -39,7 +40,8 @@
"test": "grunt test",
"integrationtest": "grunt integrationtest",
"build": "webpack && webpack --config webpack.config.min.js && grunt uglyasm && webpack --config webpack.node.config.js",
"watch": "webpack --watch"
"watch": "webpack --watch",
"lint": "eslint src"
},
"repository": {
"type": "git",

@ -267,14 +267,27 @@ export default {
return decodeFromBoundingBox(box);
},
decodeFromBoundingBoxes: function(boxes) {
var i, result;
var i, result,
barcodes = [],
multiple = config.multiple;
for ( i = 0; i < boxes.length; i++) {
result = decodeFromBoundingBox(boxes[i]);
if (result && result.codeResult) {
result.box = boxes[i];
const box = boxes[i];
result = decodeFromBoundingBox(box) || {};
result.box = box;
if (multiple) {
barcodes.push(result);
} else if (result.codeResult) {
return result;
}
}
if (multiple) {
return {
barcodes
};
}
},
setReaders: function(readers) {
config.readers = readers;

@ -74,7 +74,7 @@ function initInputStream(cb) {
function getViewPort() {
var target = _config.inputStream.target;
// Check if target is already a DOM element
if(target && target.nodeName && target.nodeType === 1) {
if (target && target.nodeName && target.nodeType === 1) {
return target;
} else {
// Use '#interactive.viewport' as a fallback selector (backwards compatibility)
@ -176,14 +176,24 @@ function transformResult(result) {
yOffset = topRight.y,
i;
if (!result || (xOffset === 0 && yOffset === 0)) {
if (xOffset === 0 && yOffset === 0) {
return;
}
if (result.barcodes) {
for (i = 0; i < result.barcodes.length; i++) {
transformResult(result.barcodes[i]);
}
}
if (result.line && result.line.length === 2) {
moveLine(result.line);
}
if (result.box) {
moveBox(result.box);
}
if (result.boxes && result.boxes.length > 0) {
for (i = 0; i < result.boxes.length; i++) {
moveBox(result.boxes[i]);
@ -207,19 +217,36 @@ function transformResult(result) {
}
}
function publishResult(result, imageData) {
if (_onUIThread) {
transformResult(result);
if (imageData && result && result.codeResult) {
if (_resultCollector) {
_resultCollector.addResult(imageData, _inputStream.getCanvasSize(), result.codeResult);
function addResult (result, imageData) {
if (!imageData || !_resultCollector) {
return;
}
if (result.barcodes) {
result.barcodes.filter(barcode => barcode.codeResult)
.forEach(barcode => addResult(barcode, imageData));
} else if (result.codeResult) {
_resultCollector.addResult(imageData, _inputStream.getCanvasSize(), result.codeResult);
}
}
function hasCodeResult (result) {
return result && (result.barcodes ?
result.barcodes.some(barcode => barcode.codeResult) :
result.codeResult);
}
function publishResult(result, imageData) {
const resultToPublish = result && (result.barcodes || result);
if (result && _onUIThread) {
transformResult(result);
addResult(result, imageData);
}
Events.publish("processed", result);
if (result && result.codeResult) {
Events.publish("detected", result);
Events.publish("processed", resultToPublish);
if (hasCodeResult(result)) {
Events.publish("detected", resultToPublish);
}
}

Loading…
Cancel
Save