Updated test-runner; Added integration-tests for EAN; Fixed error-measure for EAN

pull/40/head
Christoph Oberhofer 10 years ago
parent eb9d5ba8dc
commit d4ba4ccaae

14
dist/quagga.js vendored

@ -463,7 +463,7 @@ define(
error = 0,
singleError = 0,
modulo = this.MODULO,
maxSingleError = 0.9;
maxSingleError = this.SINGLE_CODE_ERROR || 0.9;
for (i = 0; i < counter.length; i++) {
singleError = Math.abs(code[i] - counter[i]);
@ -1121,7 +1121,9 @@ define(
[3, 1, 2, 1],
[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);
@ -1162,7 +1164,7 @@ define(
}
}
bestMatch.end = i;
if (bestMatch.error > 0.5) {
if (bestMatch.error > self.AVG_CODE_ERROR) {
return null;
}
return bestMatch;
@ -1205,7 +1207,7 @@ define(
}
if ( epsilon === undefined) {
epsilon = 0.5;
epsilon = self.AVG_CODE_ERROR;
}
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
for ( i = 1; i < extrema.length - 1; i++) {
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 {
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++) {

@ -6,20 +6,32 @@ module.exports = function(config) {
'test-main.js',
'src/vendor/glMatrix.js',
'src/typedefs.js',
{pattern: 'node_modules/async/lib/async.js', included: false},
{pattern: 'src/*.js', included: false},
{pattern: 'spec/**/*.js', included: false},
{pattern: 'test/**/*.*', included: false}
],
exclude: [
],
preprocessors: {
'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'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['PhantomJS'],
browsers: ['Chrome'],
singleRun: false,
coverageReporter: {
type : 'html',

@ -4,6 +4,7 @@
"description": "An advanced barcode-scanner written in JavaScript",
"main": "dist/quagga.js",
"devDependencies": {
"async": "^0.9.0",
"grunt": "~0.4.5",
"grunt-contrib-jshint": "~0.10.0",
"grunt-contrib-nodeunit": "~0.4.1",
@ -12,7 +13,8 @@
"grunt-requirejs": "^0.4.2",
"karma": "latest",
"karma-chai": "latest",
"karma-coverage": "^0.2.7",
"karma-chrome-launcher": "^0.1.12",
"karma-coverage": "^0.3.1",
"karma-mocha": "latest",
"karma-phantomjs-launcher": "^0.1.4",
"karma-requirejs": "^0.2.2",

@ -31,6 +31,9 @@ define(['camera_access'], function(CameraAccess){
src: null,
addEventListener: function() {
},
removeEventListener: 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,
singleError = 0,
modulo = this.MODULO,
maxSingleError = 0.9;
maxSingleError = this.SINGLE_CODE_ERROR || 0.9;
for (i = 0; i < counter.length; i++) {
singleError = Math.abs(code[i] - counter[i]);

@ -162,9 +162,9 @@ define(["cv_utils", "image_wrapper"], function(CVUtils, ImageWrapper) {
// iterate over extrema and convert to binary based on avg between minmax
for ( i = 1; i < extrema.length - 1; i++) {
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 {
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++) {

@ -41,7 +41,9 @@ define(
[3, 1, 2, 1],
[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);
@ -82,7 +84,7 @@ define(
}
}
bestMatch.end = i;
if (bestMatch.error > 0.5) {
if (bestMatch.error > self.AVG_CODE_ERROR) {
return null;
}
return bestMatch;
@ -125,7 +127,7 @@ define(
}
if ( epsilon === undefined) {
epsilon = 0.5;
epsilon = self.AVG_CODE_ERROR;
}
for ( i = 0; i < pattern.length; i++) {

@ -22,7 +22,31 @@ require.config({
'cluster': 'src/cluster',
'camera_access': 'src/camera_access',
'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,
callback: window.__karma__.start

Loading…
Cancel
Save