mirror of
https://github.com/serratus/quaggaJS.git
synced 2026-08-12 21:21:42 +08:00
Updated test-runner; Added integration-tests for EAN; Fixed error-measure for EAN
This commit is contained in:
Vendored
+8
-6
@@ -463,7 +463,7 @@ define(
|
|||||||
error = 0,
|
error = 0,
|
||||||
singleError = 0,
|
singleError = 0,
|
||||||
modulo = this.MODULO,
|
modulo = this.MODULO,
|
||||||
maxSingleError = 0.9;
|
maxSingleError = this.SINGLE_CODE_ERROR || 0.9;
|
||||||
|
|
||||||
for (i = 0; i < counter.length; i++) {
|
for (i = 0; i < counter.length; i++) {
|
||||||
singleError = Math.abs(code[i] - counter[i]);
|
singleError = Math.abs(code[i] - counter[i]);
|
||||||
@@ -1121,7 +1121,9 @@ define(
|
|||||||
[3, 1, 2, 1],
|
[3, 1, 2, 1],
|
||||||
[2, 1, 1, 3]
|
[2, 1, 1, 3]
|
||||||
]},
|
]},
|
||||||
CODE_FREQUENCY : {value: [0, 11, 13, 14, 19, 25, 28, 21, 22, 26]}
|
CODE_FREQUENCY : {value: [0, 11, 13, 14, 19, 25, 28, 21, 22, 26]},
|
||||||
|
SINGLE_CODE_ERROR: {value: 1},
|
||||||
|
AVG_CODE_ERROR: {value: 0.5}
|
||||||
};
|
};
|
||||||
|
|
||||||
EANReader.prototype = Object.create(BarcodeReader.prototype, properties);
|
EANReader.prototype = Object.create(BarcodeReader.prototype, properties);
|
||||||
@@ -1162,7 +1164,7 @@ define(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
bestMatch.end = i;
|
bestMatch.end = i;
|
||||||
if (bestMatch.error > 0.5) {
|
if (bestMatch.error > self.AVG_CODE_ERROR) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return bestMatch;
|
return bestMatch;
|
||||||
@@ -1205,7 +1207,7 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( epsilon === undefined) {
|
if ( epsilon === undefined) {
|
||||||
epsilon = 0.5;
|
epsilon = self.AVG_CODE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( i = 0; i < pattern.length; i++) {
|
for ( i = 0; i < pattern.length; i++) {
|
||||||
@@ -6604,9 +6606,9 @@ define('bresenham',["cv_utils", "image_wrapper"], function(CVUtils, ImageWrapper
|
|||||||
// iterate over extrema and convert to binary based on avg between minmax
|
// iterate over extrema and convert to binary based on avg between minmax
|
||||||
for ( i = 1; i < extrema.length - 1; i++) {
|
for ( i = 1; i < extrema.length - 1; i++) {
|
||||||
if (extrema[i + 1].val > extrema[i].val) {
|
if (extrema[i + 1].val > extrema[i].val) {
|
||||||
threshold = (extrema[i].val + (extrema[i + 1].val - extrema[i].val) / 2) | 0;
|
threshold = (extrema[i].val + ((extrema[i + 1].val - extrema[i].val) / 3) * 2) | 0;
|
||||||
} else {
|
} else {
|
||||||
threshold = (extrema[i + 1].val + (extrema[i].val - extrema[i + 1].val) / 2) | 0;
|
threshold = (extrema[i + 1].val + ((extrema[i].val - extrema[i + 1].val) / 3)) | 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( j = extrema[i].pos; j < extrema[i + 1].pos; j++) {
|
for ( j = extrema[i].pos; j < extrema[i + 1].pos; j++) {
|
||||||
|
|||||||
+13
-1
@@ -6,20 +6,32 @@ module.exports = function(config) {
|
|||||||
'test-main.js',
|
'test-main.js',
|
||||||
'src/vendor/glMatrix.js',
|
'src/vendor/glMatrix.js',
|
||||||
'src/typedefs.js',
|
'src/typedefs.js',
|
||||||
|
{pattern: 'node_modules/async/lib/async.js', included: false},
|
||||||
{pattern: 'src/*.js', included: false},
|
{pattern: 'src/*.js', included: false},
|
||||||
{pattern: 'spec/**/*.js', included: false},
|
{pattern: 'spec/**/*.js', included: false},
|
||||||
|
{pattern: 'test/**/*.*', included: false}
|
||||||
],
|
],
|
||||||
exclude: [
|
exclude: [
|
||||||
],
|
],
|
||||||
preprocessors: {
|
preprocessors: {
|
||||||
'src/*.js': ['coverage']
|
'src/*.js': ['coverage']
|
||||||
},
|
},
|
||||||
|
plugins: [
|
||||||
|
'karma-chrome-launcher',
|
||||||
|
'karma-coverage',
|
||||||
|
'karma-mocha',
|
||||||
|
'karma-requirejs',
|
||||||
|
'karma-chai',
|
||||||
|
'karma-sinon',
|
||||||
|
'karma-sinon-chai',
|
||||||
|
'karma-phantomjs-launcher'
|
||||||
|
],
|
||||||
reporters: ['progress', 'coverage'],
|
reporters: ['progress', 'coverage'],
|
||||||
port: 9876,
|
port: 9876,
|
||||||
colors: true,
|
colors: true,
|
||||||
logLevel: config.LOG_INFO,
|
logLevel: config.LOG_INFO,
|
||||||
autoWatch: true,
|
autoWatch: true,
|
||||||
browsers: ['PhantomJS'],
|
browsers: ['Chrome'],
|
||||||
singleRun: false,
|
singleRun: false,
|
||||||
coverageReporter: {
|
coverageReporter: {
|
||||||
type : 'html',
|
type : 'html',
|
||||||
|
|||||||
+3
-1
@@ -4,6 +4,7 @@
|
|||||||
"description": "An advanced barcode-scanner written in JavaScript",
|
"description": "An advanced barcode-scanner written in JavaScript",
|
||||||
"main": "dist/quagga.js",
|
"main": "dist/quagga.js",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"async": "^0.9.0",
|
||||||
"grunt": "~0.4.5",
|
"grunt": "~0.4.5",
|
||||||
"grunt-contrib-jshint": "~0.10.0",
|
"grunt-contrib-jshint": "~0.10.0",
|
||||||
"grunt-contrib-nodeunit": "~0.4.1",
|
"grunt-contrib-nodeunit": "~0.4.1",
|
||||||
@@ -12,7 +13,8 @@
|
|||||||
"grunt-requirejs": "^0.4.2",
|
"grunt-requirejs": "^0.4.2",
|
||||||
"karma": "latest",
|
"karma": "latest",
|
||||||
"karma-chai": "latest",
|
"karma-chai": "latest",
|
||||||
"karma-coverage": "^0.2.7",
|
"karma-chrome-launcher": "^0.1.12",
|
||||||
|
"karma-coverage": "^0.3.1",
|
||||||
"karma-mocha": "latest",
|
"karma-mocha": "latest",
|
||||||
"karma-phantomjs-launcher": "^0.1.4",
|
"karma-phantomjs-launcher": "^0.1.4",
|
||||||
"karma-requirejs": "^0.2.2",
|
"karma-requirejs": "^0.2.2",
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ define(['camera_access'], function(CameraAccess){
|
|||||||
src: null,
|
src: null,
|
||||||
addEventListener: function() {
|
addEventListener: function() {
|
||||||
|
|
||||||
|
},
|
||||||
|
removeEventListener: function() {
|
||||||
|
|
||||||
},
|
},
|
||||||
play: function() {
|
play: function() {
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
|
||||||
|
|
||||||
|
define(['quagga', 'async'], function(Quagga, async) {
|
||||||
|
describe('decodeSingle', function () {
|
||||||
|
var config;
|
||||||
|
|
||||||
|
this.timeout(10000);
|
||||||
|
|
||||||
|
beforeEach(function () {
|
||||||
|
config = {
|
||||||
|
inputStream: {
|
||||||
|
size: 640
|
||||||
|
},
|
||||||
|
locator: {
|
||||||
|
patchSize: "medium",
|
||||||
|
halfSample: true
|
||||||
|
},
|
||||||
|
numOfWorkers: 0,
|
||||||
|
decoder: {
|
||||||
|
readers: ["ean_reader"]
|
||||||
|
},
|
||||||
|
locate: true,
|
||||||
|
src: null
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
var folder = "base/test/fixtures/ean/",
|
||||||
|
testSet = [{
|
||||||
|
"name": "image-001.jpg",
|
||||||
|
"result": "3574660239843"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "image-002.jpg",
|
||||||
|
"result": "8032754490297"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "image-003.jpg",
|
||||||
|
"result": "4006209700068"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "image-004.jpg",
|
||||||
|
"result": "9002233139084"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "image-005.jpg",
|
||||||
|
"result": "8004030044005"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "image-006.jpg",
|
||||||
|
"result": "4003626011159"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "image-007.jpg",
|
||||||
|
"result": "2111220009686"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "image-008.jpg",
|
||||||
|
"result": "9000275609022"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "image-009.jpg",
|
||||||
|
"result": "9004593978587"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "image-010.jpg",
|
||||||
|
"result": "9002244845578"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
async.each(testSet, function (sample, callback) {
|
||||||
|
it('should decode ' + sample.name + " correctly", function(done) {
|
||||||
|
config.src = folder + sample.name;
|
||||||
|
Quagga.decodeSingle(config, function (result) {});
|
||||||
|
Quagga.onProcessed(function(result) {
|
||||||
|
expect(result.codeResult.code).to.equal(sample.result);
|
||||||
|
done();
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, function() {});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -29,7 +29,7 @@ define(
|
|||||||
error = 0,
|
error = 0,
|
||||||
singleError = 0,
|
singleError = 0,
|
||||||
modulo = this.MODULO,
|
modulo = this.MODULO,
|
||||||
maxSingleError = 0.9;
|
maxSingleError = this.SINGLE_CODE_ERROR || 0.9;
|
||||||
|
|
||||||
for (i = 0; i < counter.length; i++) {
|
for (i = 0; i < counter.length; i++) {
|
||||||
singleError = Math.abs(code[i] - counter[i]);
|
singleError = Math.abs(code[i] - counter[i]);
|
||||||
|
|||||||
+2
-2
@@ -162,9 +162,9 @@ define(["cv_utils", "image_wrapper"], function(CVUtils, ImageWrapper) {
|
|||||||
// iterate over extrema and convert to binary based on avg between minmax
|
// iterate over extrema and convert to binary based on avg between minmax
|
||||||
for ( i = 1; i < extrema.length - 1; i++) {
|
for ( i = 1; i < extrema.length - 1; i++) {
|
||||||
if (extrema[i + 1].val > extrema[i].val) {
|
if (extrema[i + 1].val > extrema[i].val) {
|
||||||
threshold = (extrema[i].val + (extrema[i + 1].val - extrema[i].val) / 2) | 0;
|
threshold = (extrema[i].val + ((extrema[i + 1].val - extrema[i].val) / 3) * 2) | 0;
|
||||||
} else {
|
} else {
|
||||||
threshold = (extrema[i + 1].val + (extrema[i].val - extrema[i + 1].val) / 2) | 0;
|
threshold = (extrema[i + 1].val + ((extrema[i].val - extrema[i + 1].val) / 3)) | 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( j = extrema[i].pos; j < extrema[i + 1].pos; j++) {
|
for ( j = extrema[i].pos; j < extrema[i + 1].pos; j++) {
|
||||||
|
|||||||
+5
-3
@@ -41,7 +41,9 @@ define(
|
|||||||
[3, 1, 2, 1],
|
[3, 1, 2, 1],
|
||||||
[2, 1, 1, 3]
|
[2, 1, 1, 3]
|
||||||
]},
|
]},
|
||||||
CODE_FREQUENCY : {value: [0, 11, 13, 14, 19, 25, 28, 21, 22, 26]}
|
CODE_FREQUENCY : {value: [0, 11, 13, 14, 19, 25, 28, 21, 22, 26]},
|
||||||
|
SINGLE_CODE_ERROR: {value: 1},
|
||||||
|
AVG_CODE_ERROR: {value: 0.5}
|
||||||
};
|
};
|
||||||
|
|
||||||
EANReader.prototype = Object.create(BarcodeReader.prototype, properties);
|
EANReader.prototype = Object.create(BarcodeReader.prototype, properties);
|
||||||
@@ -82,7 +84,7 @@ define(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
bestMatch.end = i;
|
bestMatch.end = i;
|
||||||
if (bestMatch.error > 0.5) {
|
if (bestMatch.error > self.AVG_CODE_ERROR) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return bestMatch;
|
return bestMatch;
|
||||||
@@ -125,7 +127,7 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( epsilon === undefined) {
|
if ( epsilon === undefined) {
|
||||||
epsilon = 0.5;
|
epsilon = self.AVG_CODE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( i = 0; i < pattern.length; i++) {
|
for ( i = 0; i < pattern.length; i++) {
|
||||||
|
|||||||
+25
-1
@@ -22,7 +22,31 @@ require.config({
|
|||||||
'cluster': 'src/cluster',
|
'cluster': 'src/cluster',
|
||||||
'camera_access': 'src/camera_access',
|
'camera_access': 'src/camera_access',
|
||||||
'events': 'src/events',
|
'events': 'src/events',
|
||||||
'html_utils': 'src/html_utils'
|
'html_utils': 'src/html_utils',
|
||||||
|
'quagga': 'src/quagga',
|
||||||
|
'barcode_decoder': 'src/barcode_decoder',
|
||||||
|
'barcode_locator': 'src/barcode_locator',
|
||||||
|
'barcode_reader': 'src/barcode_reader',
|
||||||
|
'bresenham': 'src/bresenham',
|
||||||
|
'codabar_reader': 'src/codabar_reader',
|
||||||
|
'code_39_reader': 'src/code_39_reader',
|
||||||
|
'code_39_vin_reader': 'src/code_39_vin_reader',
|
||||||
|
'code_128_reader': 'src/code_128_reader',
|
||||||
|
'config': 'src/config',
|
||||||
|
'ean_8_reader': 'src/ean_8_reader',
|
||||||
|
'ean_reader': 'src/ean_reader',
|
||||||
|
'frame_grabber': 'src/frame_grabber',
|
||||||
|
'image_debug': 'src/image_debug',
|
||||||
|
'image_loader': 'src/image_loader',
|
||||||
|
'image_wrapper': 'src/image_wrapper',
|
||||||
|
'input_stream': 'src/input_stream',
|
||||||
|
'rasterizer': 'src/rasterizer',
|
||||||
|
'skeletonizer': 'src/skeletonizer',
|
||||||
|
'subImage': 'src/subImage',
|
||||||
|
'tracer': 'src/tracer',
|
||||||
|
'upc_e_reader': 'src/upc_e_reader',
|
||||||
|
'upc_reader': 'src/upc_reader',
|
||||||
|
'async': 'node_modules/async/lib/async'
|
||||||
},
|
},
|
||||||
deps: allTestFiles,
|
deps: allTestFiles,
|
||||||
callback: window.__karma__.start
|
callback: window.__karma__.start
|
||||||
|
|||||||
Reference in New Issue
Block a user