mirror of
https://github.com/serratus/quaggaJS.git
synced 2026-08-13 05:31:37 +08:00
Upgrade to webpack 2 and babel 6
This commit is contained in:
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"check-es2015-constants",
|
||||||
|
"transform-es2015-arrow-functions",
|
||||||
|
"transform-es2015-block-scoped-functions",
|
||||||
|
"transform-es2015-block-scoping",
|
||||||
|
["transform-es2015-classes", { "loose": true }],
|
||||||
|
["transform-es2015-computed-properties", { "loose": true }],
|
||||||
|
["transform-es2015-destructuring", { "loose": true }],
|
||||||
|
["transform-es2015-for-of", { "loose": true }],
|
||||||
|
"transform-es2015-function-name",
|
||||||
|
"transform-es2015-literals",
|
||||||
|
|
||||||
|
"transform-es2015-object-super",
|
||||||
|
"transform-es2015-parameters",
|
||||||
|
"transform-es2015-shorthand-properties",
|
||||||
|
["transform-es2015-spread", { "loose": true }],
|
||||||
|
"transform-es2015-sticky-regex",
|
||||||
|
["transform-es2015-template-literals", { "loose": true }],
|
||||||
|
"transform-es2015-unicode-regex",
|
||||||
|
"transform-es2015-typeof-symbol",
|
||||||
|
"transform-object-rest-spread",
|
||||||
|
"lodash"
|
||||||
|
],
|
||||||
|
"env": {
|
||||||
|
"commonjs": {
|
||||||
|
"plugins": [
|
||||||
|
["transform-es2015-modules-commonjs", { "loose": true }],
|
||||||
|
"add-module-exports"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
var Quagga = require('../lib/quagga');
|
var Quagga = require('../lib/quagga').default;
|
||||||
|
|
||||||
Quagga.decodeSingle({
|
Quagga.decodeSingle({
|
||||||
src: "../test/fixtures/code_128/image-001.jpg",
|
src: "../test/fixtures/code_128/image-001.jpg",
|
||||||
|
|||||||
@@ -15,23 +15,17 @@ module.exports = function(config) {
|
|||||||
},
|
},
|
||||||
webpack: {
|
webpack: {
|
||||||
module: {
|
module: {
|
||||||
preLoaders: [
|
loaders: [{
|
||||||
{
|
test: /\.jsx?$/,
|
||||||
test: /\.js$/,
|
exclude: /node_modules/,
|
||||||
exclude: [
|
loader: 'babel-loader'
|
||||||
/node_modules/
|
}]
|
||||||
],
|
|
||||||
loader: 'babel'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
extensions: ['', '.js', '.jsx'],
|
modules: [
|
||||||
root: path.resolve(__dirname),
|
path.resolve('./src/input/'),
|
||||||
alias: {
|
'node_modules'
|
||||||
'input_stream$': 'src/input/input_stream',
|
]
|
||||||
'frame_grabber$': 'src/input/frame_grabber'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
new webpack.DefinePlugin({
|
new webpack.DefinePlugin({
|
||||||
|
|||||||
+15
-23
@@ -14,31 +14,23 @@ module.exports = function(config) {
|
|||||||
},
|
},
|
||||||
webpack: {
|
webpack: {
|
||||||
module: {
|
module: {
|
||||||
preLoaders: [
|
loaders: [{
|
||||||
{
|
test: /\.jsx?$/,
|
||||||
test: /\.js$/,
|
exclude: [
|
||||||
exclude: [
|
path.resolve('node_modules/')
|
||||||
/node_modules/
|
],
|
||||||
],
|
loader: 'babel-loader'
|
||||||
loader: 'babel'
|
}, {
|
||||||
},
|
test: /\.js$/,
|
||||||
{
|
include: path.resolve('src'),
|
||||||
test: /\.js$/,
|
loader: 'babel-istanbul'
|
||||||
include: [
|
}]
|
||||||
path.resolve('src')
|
|
||||||
],
|
|
||||||
exclude: /node_modules/,
|
|
||||||
loader: 'isparta'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
extensions: ['', '.js', '.jsx'],
|
modules: [
|
||||||
root: path.resolve(__dirname),
|
path.resolve('./src/input/'),
|
||||||
alias: {
|
'node_modules'
|
||||||
'input_stream$': 'src/input/input_stream',
|
]
|
||||||
'frame_grabber$': 'src/input/frame_grabber'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
new webpack.DefinePlugin({
|
new webpack.DefinePlugin({
|
||||||
|
|||||||
+37
-10
@@ -6,9 +6,34 @@
|
|||||||
"browser": "dist/quagga.min.js",
|
"browser": "dist/quagga.min.js",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"async": "^1.4.2",
|
"async": "^1.4.2",
|
||||||
"babel-core": "^5.8.25",
|
"babel-cli": "^6.5.1",
|
||||||
"babel-eslint": "^4.1.3",
|
"babel-core": "^6.7.4",
|
||||||
"babel-loader": "^5.3.2",
|
"babel-eslint": "^6.0.0",
|
||||||
|
"babel-istanbul-loader": "^0.1.0",
|
||||||
|
"babel-loader": "^6.2.4",
|
||||||
|
"babel-plugin-add-module-exports": "^0.1.2",
|
||||||
|
"babel-plugin-check-es2015-constants": "^6.3.13",
|
||||||
|
"babel-plugin-lodash": "^2.2.1",
|
||||||
|
"babel-plugin-transform-es2015-arrow-functions": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-block-scoped-functions": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-block-scoping": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-classes": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-computed-properties": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-destructuring": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-for-of": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-function-name": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-literals": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-modules-commonjs": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-object-super": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-parameters": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-shorthand-properties": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-spread": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-sticky-regex": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-template-literals": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-typeof-symbol": "^6.3.13",
|
||||||
|
"babel-plugin-transform-es2015-unicode-regex": "^6.3.13",
|
||||||
|
"babel-plugin-transform-object-rest-spread": "^6.5.0",
|
||||||
|
"babel-plugin-transform-regenerator": "^6.3.13",
|
||||||
"chai": "^3.4.1",
|
"chai": "^3.4.1",
|
||||||
"core-js": "^1.2.1",
|
"core-js": "^1.2.1",
|
||||||
"cross-env": "^1.0.7",
|
"cross-env": "^1.0.7",
|
||||||
@@ -17,7 +42,7 @@
|
|||||||
"grunt-cli": "^0.1.13",
|
"grunt-cli": "^0.1.13",
|
||||||
"grunt-contrib-nodeunit": "^0.4.1",
|
"grunt-contrib-nodeunit": "^0.4.1",
|
||||||
"grunt-karma": "^0.12.1",
|
"grunt-karma": "^0.12.1",
|
||||||
"isparta-loader": "^1.0.0",
|
"isparta-loader": "^2.0.0",
|
||||||
"karma": "^0.13.9",
|
"karma": "^0.13.9",
|
||||||
"karma-chai": "0.1.0",
|
"karma-chai": "0.1.0",
|
||||||
"karma-chrome-launcher": "^0.2.0",
|
"karma-chrome-launcher": "^0.2.0",
|
||||||
@@ -34,18 +59,18 @@
|
|||||||
"phantomjs": "^1.9.18",
|
"phantomjs": "^1.9.18",
|
||||||
"sinon": "^1.16.1",
|
"sinon": "^1.16.1",
|
||||||
"sinon-chai": "^2.8.0",
|
"sinon-chai": "^2.8.0",
|
||||||
"webpack": "^1.12.2",
|
"webpack": "^2.1.0-beta.4",
|
||||||
"webpack-core": "^0.6.8"
|
"webpack-sources": "^0.1.1"
|
||||||
},
|
},
|
||||||
"directories": {
|
"directories": {
|
||||||
"doc": "doc"
|
"doc": "doc"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "grunt test",
|
"test": "cross-env BABEL_ENV=commonjs grunt test",
|
||||||
"integrationtest": "grunt integrationtest",
|
"integrationtest": "grunt integrationtest",
|
||||||
"build:dev": "cross-env BUILD_ENV=development webpack",
|
"build:dev": "cross-env BUILD_ENV=development webpack",
|
||||||
"build:prod": "cross-env BUILD_ENV=production webpack --config webpack.config.min.js && grunt uglyasm",
|
"build:prod": "cross-env BUILD_ENV=production webpack --config webpack.config.min.js && grunt uglyasm",
|
||||||
"build:node": "cross-env BUILD_ENV=node webpack --config webpack.node.config.js",
|
"build:node": "cross-env BABEL_ENV=commonjs BUILD_ENV=node webpack --config webpack.node.config.js",
|
||||||
"build": "npm run build:dev && npm run build:prod && npm run build:node",
|
"build": "npm run build:dev && npm run build:prod && npm run build:node",
|
||||||
"watch": "cross-env BUILD_ENV=development webpack --watch",
|
"watch": "cross-env BUILD_ENV=development webpack --watch",
|
||||||
"lint": "eslint src"
|
"lint": "eslint src"
|
||||||
@@ -77,8 +102,10 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"get-pixels": "^3.2.3",
|
"get-pixels": "^3.2.3",
|
||||||
"gl-matrix": "^2.3.1",
|
"gl-mat2": "^1.0.0",
|
||||||
"lodash": "^3.10.1",
|
"gl-vec2": "^1.0.0",
|
||||||
|
"gl-vec3": "^1.0.3",
|
||||||
|
"lodash": "^4.6.1",
|
||||||
"ndarray": "^1.0.18",
|
"ndarray": "^1.0.18",
|
||||||
"ndarray-linear-interpolate": "^1.0.0",
|
"ndarray-linear-interpolate": "^1.0.0",
|
||||||
"webrtc-adapter": "^1.0.6"
|
"webrtc-adapter": "^1.0.6"
|
||||||
|
|||||||
+5
-5
@@ -1,5 +1,5 @@
|
|||||||
var ConcatSource = require("webpack-core/lib/ConcatSource");
|
var ConcatSource = require("webpack-sources").ConcatSource;
|
||||||
var OriginalSource = require("webpack-core/lib/OriginalSource");
|
var OriginalSource = require("webpack-sources").OriginalSource;
|
||||||
|
|
||||||
function MyUmdPlugin(options) {
|
function MyUmdPlugin(options) {
|
||||||
this.name = options.library;
|
this.name = options.library;
|
||||||
@@ -13,11 +13,11 @@ MyUmdPlugin.prototype.apply = function(compiler) {
|
|||||||
return new ConcatSource(new OriginalSource(
|
return new ConcatSource(new OriginalSource(
|
||||||
"(function webpackUniversalModuleDefinition(root, factory) {\n" +
|
"(function webpackUniversalModuleDefinition(root, factory) {\n" +
|
||||||
" if(typeof exports === 'object' && typeof module === 'object')\n" +
|
" if(typeof exports === 'object' && typeof module === 'object')\n" +
|
||||||
" module.exports = factory(factory.toString());\n" +
|
" module.exports = factory(factory.toString()).default;\n" +
|
||||||
" else if(typeof exports === 'object')\n" +
|
" else if(typeof exports === 'object')\n" +
|
||||||
" exports[\"" + this.name + "\"] = factory(factory.toString());\n" +
|
" exports[\"" + this.name + "\"] = factory(factory.toString()).default;\n" +
|
||||||
" else\n" +
|
" else\n" +
|
||||||
" root[\"" + this.name + "\"] = factory(factory.toString());\n" +
|
" root[\"" + this.name + "\"] = factory(factory.toString()).default;\n" +
|
||||||
"})(this, function(__factorySource__) {\nreturn ", "webpack/myModuleDefinition"), source, "\n});\n");
|
"})(this, function(__factorySource__) {\nreturn ", "webpack/myModuleDefinition"), source, "\n});\n");
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
mainTemplate.plugin("global-hash-paths", function(paths) {
|
mainTemplate.plugin("global-hash-paths", function(paths) {
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
import {vec2} from 'gl-matrix';
|
const vec2 = {
|
||||||
|
clone: require('gl-vec2/clone'),
|
||||||
|
dot: require('gl-vec2/dot')
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Creates a cluster for grouping similar orientations of datapoints
|
* Creates a cluster for grouping similar orientations of datapoints
|
||||||
*/
|
*/
|
||||||
|
|||||||
+52
-51
@@ -1,15 +1,18 @@
|
|||||||
import Cluster2 from './cluster';
|
import Cluster2 from './cluster';
|
||||||
import ArrayHelper from './array_helper';
|
import ArrayHelper from './array_helper';
|
||||||
import {vec2, vec3} from 'gl-matrix';
|
const vec2 = {
|
||||||
|
clone: require('gl-vec2/clone'),
|
||||||
var CVUtils = {};
|
};
|
||||||
|
const vec3 = {
|
||||||
|
clone: require('gl-vec3/clone'),
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param x x-coordinate
|
* @param x x-coordinate
|
||||||
* @param y y-coordinate
|
* @param y y-coordinate
|
||||||
* @return ImageReference {x,y} Coordinate
|
* @return ImageReference {x,y} Coordinate
|
||||||
*/
|
*/
|
||||||
CVUtils.imageRef = function(x, y) {
|
export function imageRef(x, y) {
|
||||||
var that = {
|
var that = {
|
||||||
x: x,
|
x: x,
|
||||||
y: y,
|
y: y,
|
||||||
@@ -32,7 +35,7 @@ CVUtils.imageRef = function(x, y) {
|
|||||||
* Computes an integral image of a given grayscale image.
|
* Computes an integral image of a given grayscale image.
|
||||||
* @param imageDataContainer {ImageDataContainer} the image to be integrated
|
* @param imageDataContainer {ImageDataContainer} the image to be integrated
|
||||||
*/
|
*/
|
||||||
CVUtils.computeIntegralImage2 = function(imageWrapper, integralWrapper) {
|
export function computeIntegralImage2(imageWrapper, integralWrapper) {
|
||||||
var imageData = imageWrapper.data;
|
var imageData = imageWrapper.data;
|
||||||
var width = imageWrapper.size.x;
|
var width = imageWrapper.size.x;
|
||||||
var height = imageWrapper.size.y;
|
var height = imageWrapper.size.y;
|
||||||
@@ -75,7 +78,7 @@ CVUtils.computeIntegralImage2 = function(imageWrapper, integralWrapper) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.computeIntegralImage = function(imageWrapper, integralWrapper) {
|
export function computeIntegralImage(imageWrapper, integralWrapper) {
|
||||||
var imageData = imageWrapper.data;
|
var imageData = imageWrapper.data;
|
||||||
var width = imageWrapper.size.x;
|
var width = imageWrapper.size.x;
|
||||||
var height = imageWrapper.size.y;
|
var height = imageWrapper.size.y;
|
||||||
@@ -97,7 +100,7 @@ CVUtils.computeIntegralImage = function(imageWrapper, integralWrapper) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.thresholdImage = function(imageWrapper, threshold, targetWrapper) {
|
export function thresholdImage(imageWrapper, threshold, targetWrapper) {
|
||||||
if (!targetWrapper) {
|
if (!targetWrapper) {
|
||||||
targetWrapper = imageWrapper;
|
targetWrapper = imageWrapper;
|
||||||
}
|
}
|
||||||
@@ -108,7 +111,7 @@ CVUtils.thresholdImage = function(imageWrapper, threshold, targetWrapper) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.computeHistogram = function(imageWrapper, bitsPerPixel) {
|
export function computeHistogram(imageWrapper, bitsPerPixel) {
|
||||||
if (!bitsPerPixel) {
|
if (!bitsPerPixel) {
|
||||||
bitsPerPixel = 8;
|
bitsPerPixel = 8;
|
||||||
}
|
}
|
||||||
@@ -124,7 +127,7 @@ CVUtils.computeHistogram = function(imageWrapper, bitsPerPixel) {
|
|||||||
return hist;
|
return hist;
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.sharpenLine = function(line) {
|
export function sharpenLine(line) {
|
||||||
var i,
|
var i,
|
||||||
length = line.length,
|
length = line.length,
|
||||||
left = line[0],
|
left = line[0],
|
||||||
@@ -141,7 +144,7 @@ CVUtils.sharpenLine = function(line) {
|
|||||||
return line;
|
return line;
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.determineOtsuThreshold = function(imageWrapper, bitsPerPixel) {
|
export function determineOtsuThreshold(imageWrapper, bitsPerPixel) {
|
||||||
if (!bitsPerPixel) {
|
if (!bitsPerPixel) {
|
||||||
bitsPerPixel = 8;
|
bitsPerPixel = 8;
|
||||||
}
|
}
|
||||||
@@ -171,7 +174,7 @@ CVUtils.determineOtsuThreshold = function(imageWrapper, bitsPerPixel) {
|
|||||||
var vet = [0], p1, p2, p12, k, m1, m2, m12,
|
var vet = [0], p1, p2, p12, k, m1, m2, m12,
|
||||||
max = (1 << bitsPerPixel) - 1;
|
max = (1 << bitsPerPixel) - 1;
|
||||||
|
|
||||||
hist = CVUtils.computeHistogram(imageWrapper, bitsPerPixel);
|
hist = computeHistogram(imageWrapper, bitsPerPixel);
|
||||||
for ( k = 1; k < max; k++) {
|
for ( k = 1; k < max; k++) {
|
||||||
p1 = px(0, k);
|
p1 = px(0, k);
|
||||||
p2 = px(k + 1, max);
|
p2 = px(k + 1, max);
|
||||||
@@ -191,16 +194,16 @@ CVUtils.determineOtsuThreshold = function(imageWrapper, bitsPerPixel) {
|
|||||||
return threshold << bitShift;
|
return threshold << bitShift;
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.otsuThreshold = function(imageWrapper, targetWrapper) {
|
export function otsuThreshold(imageWrapper, targetWrapper) {
|
||||||
var threshold = CVUtils.determineOtsuThreshold(imageWrapper);
|
var threshold = determineOtsuThreshold(imageWrapper);
|
||||||
|
|
||||||
CVUtils.thresholdImage(imageWrapper, threshold, targetWrapper);
|
thresholdImage(imageWrapper, threshold, targetWrapper);
|
||||||
return threshold;
|
return threshold;
|
||||||
};
|
};
|
||||||
|
|
||||||
// local thresholding
|
// local thresholding
|
||||||
CVUtils.computeBinaryImage = function(imageWrapper, integralWrapper, targetWrapper) {
|
export function computeBinaryImage(imageWrapper, integralWrapper, targetWrapper) {
|
||||||
CVUtils.computeIntegralImage(imageWrapper, integralWrapper);
|
computeIntegralImage(imageWrapper, integralWrapper);
|
||||||
|
|
||||||
if (!targetWrapper) {
|
if (!targetWrapper) {
|
||||||
targetWrapper = imageWrapper;
|
targetWrapper = imageWrapper;
|
||||||
@@ -241,7 +244,7 @@ CVUtils.computeBinaryImage = function(imageWrapper, integralWrapper, targetWrapp
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.cluster = function(points, threshold, property) {
|
export function cluster(points, threshold, property) {
|
||||||
var i, k, cluster, point, clusters = [];
|
var i, k, cluster, point, clusters = [];
|
||||||
|
|
||||||
if (!property) {
|
if (!property) {
|
||||||
@@ -270,7 +273,7 @@ CVUtils.cluster = function(points, threshold, property) {
|
|||||||
return clusters;
|
return clusters;
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.Tracer = {
|
export const Tracer = {
|
||||||
trace: function(points, vec) {
|
trace: function(points, vec) {
|
||||||
var iteration, maxIterations = 10, top = [], result = [], centerPos = 0, currentPos = 0;
|
var iteration, maxIterations = 10, top = [], result = [], centerPos = 0, currentPos = 0;
|
||||||
|
|
||||||
@@ -340,10 +343,10 @@ CVUtils.Tracer = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.DILATE = 1;
|
export const DILATE = 1;
|
||||||
CVUtils.ERODE = 2;
|
export const ERODE = 2;
|
||||||
|
|
||||||
CVUtils.dilate = function(inImageWrapper, outImageWrapper) {
|
export function dilate(inImageWrapper, outImageWrapper) {
|
||||||
var v,
|
var v,
|
||||||
u,
|
u,
|
||||||
inImageData = inImageWrapper.data,
|
inImageData = inImageWrapper.data,
|
||||||
@@ -370,7 +373,7 @@ CVUtils.dilate = function(inImageWrapper, outImageWrapper) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.erode = function(inImageWrapper, outImageWrapper) {
|
export function erode(inImageWrapper, outImageWrapper) {
|
||||||
var v,
|
var v,
|
||||||
u,
|
u,
|
||||||
inImageData = inImageWrapper.data,
|
inImageData = inImageWrapper.data,
|
||||||
@@ -397,7 +400,7 @@ CVUtils.erode = function(inImageWrapper, outImageWrapper) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.subtract = function(aImageWrapper, bImageWrapper, resultImageWrapper) {
|
export function subtract(aImageWrapper, bImageWrapper, resultImageWrapper) {
|
||||||
if (!resultImageWrapper) {
|
if (!resultImageWrapper) {
|
||||||
resultImageWrapper = aImageWrapper;
|
resultImageWrapper = aImageWrapper;
|
||||||
}
|
}
|
||||||
@@ -411,7 +414,7 @@ CVUtils.subtract = function(aImageWrapper, bImageWrapper, resultImageWrapper) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.bitwiseOr = function(aImageWrapper, bImageWrapper, resultImageWrapper) {
|
export function bitwiseOr(aImageWrapper, bImageWrapper, resultImageWrapper) {
|
||||||
if (!resultImageWrapper) {
|
if (!resultImageWrapper) {
|
||||||
resultImageWrapper = aImageWrapper;
|
resultImageWrapper = aImageWrapper;
|
||||||
}
|
}
|
||||||
@@ -425,7 +428,7 @@ CVUtils.bitwiseOr = function(aImageWrapper, bImageWrapper, resultImageWrapper) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.countNonZero = function(imageWrapper) {
|
export function countNonZero(imageWrapper) {
|
||||||
var length = imageWrapper.data.length, data = imageWrapper.data, sum = 0;
|
var length = imageWrapper.data.length, data = imageWrapper.data, sum = 0;
|
||||||
|
|
||||||
while (length--) {
|
while (length--) {
|
||||||
@@ -434,7 +437,7 @@ CVUtils.countNonZero = function(imageWrapper) {
|
|||||||
return sum;
|
return sum;
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.topGeneric = function(list, top, scoreFunc) {
|
export function topGeneric(list, top, scoreFunc) {
|
||||||
var i, minIdx = 0, min = 0, queue = [], score, hit, pos;
|
var i, minIdx = 0, min = 0, queue = [], score, hit, pos;
|
||||||
|
|
||||||
for ( i = 0; i < top; i++) {
|
for ( i = 0; i < top; i++) {
|
||||||
@@ -463,18 +466,18 @@ CVUtils.topGeneric = function(list, top, scoreFunc) {
|
|||||||
return queue;
|
return queue;
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.grayArrayFromImage = function(htmlImage, offsetX, ctx, array) {
|
export function grayArrayFromImage(htmlImage, offsetX, ctx, array) {
|
||||||
ctx.drawImage(htmlImage, offsetX, 0, htmlImage.width, htmlImage.height);
|
ctx.drawImage(htmlImage, offsetX, 0, htmlImage.width, htmlImage.height);
|
||||||
var ctxData = ctx.getImageData(offsetX, 0, htmlImage.width, htmlImage.height).data;
|
var ctxData = ctx.getImageData(offsetX, 0, htmlImage.width, htmlImage.height).data;
|
||||||
CVUtils.computeGray(ctxData, array);
|
computeGray(ctxData, array);
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.grayArrayFromContext = function(ctx, size, offset, array) {
|
export function grayArrayFromContext(ctx, size, offset, array) {
|
||||||
var ctxData = ctx.getImageData(offset.x, offset.y, size.x, size.y).data;
|
var ctxData = ctx.getImageData(offset.x, offset.y, size.x, size.y).data;
|
||||||
CVUtils.computeGray(ctxData, array);
|
computeGray(ctxData, array);
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.grayAndHalfSampleFromCanvasData = function(canvasData, size, outArray) {
|
export function grayAndHalfSampleFromCanvasData(canvasData, size, outArray) {
|
||||||
var topRowIdx = 0;
|
var topRowIdx = 0;
|
||||||
var bottomRowIdx = size.x;
|
var bottomRowIdx = size.x;
|
||||||
var endIdx = Math.floor(canvasData.length / 4);
|
var endIdx = Math.floor(canvasData.length / 4);
|
||||||
@@ -507,7 +510,7 @@ CVUtils.grayAndHalfSampleFromCanvasData = function(canvasData, size, outArray) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.computeGray = function(imageData, outArray, config) {
|
export function computeGray(imageData, outArray, config) {
|
||||||
var l = (imageData.length / 4) | 0,
|
var l = (imageData.length / 4) | 0,
|
||||||
i,
|
i,
|
||||||
singleChannel = config && config.singleChannel === true;
|
singleChannel = config && config.singleChannel === true;
|
||||||
@@ -524,7 +527,7 @@ CVUtils.computeGray = function(imageData, outArray, config) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.loadImageArray = function(src, callback, canvas) {
|
export function loadImageArray(src, callback, canvas) {
|
||||||
if (!canvas) {
|
if (!canvas) {
|
||||||
canvas = document.createElement('canvas');
|
canvas = document.createElement('canvas');
|
||||||
}
|
}
|
||||||
@@ -538,7 +541,7 @@ CVUtils.loadImageArray = function(src, callback, canvas) {
|
|||||||
var array = new Uint8Array(this.width * this.height);
|
var array = new Uint8Array(this.width * this.height);
|
||||||
ctx.drawImage(this, 0, 0);
|
ctx.drawImage(this, 0, 0);
|
||||||
var data = ctx.getImageData(0, 0, this.width, this.height).data;
|
var data = ctx.getImageData(0, 0, this.width, this.height).data;
|
||||||
CVUtils.computeGray(data, array);
|
computeGray(data, array);
|
||||||
this.callback(array, {
|
this.callback(array, {
|
||||||
x: this.width,
|
x: this.width,
|
||||||
y: this.height
|
y: this.height
|
||||||
@@ -551,7 +554,7 @@ CVUtils.loadImageArray = function(src, callback, canvas) {
|
|||||||
* @param inImg {ImageWrapper} input image to be sampled
|
* @param inImg {ImageWrapper} input image to be sampled
|
||||||
* @param outImg {ImageWrapper} to be stored in
|
* @param outImg {ImageWrapper} to be stored in
|
||||||
*/
|
*/
|
||||||
CVUtils.halfSample = function(inImgWrapper, outImgWrapper) {
|
export function halfSample(inImgWrapper, outImgWrapper) {
|
||||||
var inImg = inImgWrapper.data;
|
var inImg = inImgWrapper.data;
|
||||||
var inWidth = inImgWrapper.size.x;
|
var inWidth = inImgWrapper.size.x;
|
||||||
var outImg = outImgWrapper.data;
|
var outImg = outImgWrapper.data;
|
||||||
@@ -573,7 +576,7 @@ CVUtils.halfSample = function(inImgWrapper, outImgWrapper) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.hsv2rgb = function(hsv, rgb) {
|
export function hsv2rgb(hsv, rgb) {
|
||||||
var h = hsv[0],
|
var h = hsv[0],
|
||||||
s = hsv[1],
|
s = hsv[1],
|
||||||
v = hsv[2],
|
v = hsv[2],
|
||||||
@@ -611,7 +614,7 @@ CVUtils.hsv2rgb = function(hsv, rgb) {
|
|||||||
return rgb;
|
return rgb;
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils._computeDivisors = function(n) {
|
export function _computeDivisors(n) {
|
||||||
var largeDivisors = [],
|
var largeDivisors = [],
|
||||||
divisors = [],
|
divisors = [],
|
||||||
i;
|
i;
|
||||||
@@ -627,7 +630,7 @@ CVUtils._computeDivisors = function(n) {
|
|||||||
return divisors.concat(largeDivisors);
|
return divisors.concat(largeDivisors);
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils._computeIntersection = function(arr1, arr2) {
|
function _computeIntersection(arr1, arr2) {
|
||||||
var i = 0,
|
var i = 0,
|
||||||
j = 0,
|
j = 0,
|
||||||
result = [];
|
result = [];
|
||||||
@@ -646,11 +649,11 @@ CVUtils._computeIntersection = function(arr1, arr2) {
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.calculatePatchSize = function(patchSize, imgSize) {
|
export function calculatePatchSize(patchSize, imgSize) {
|
||||||
var divisorsX = this._computeDivisors(imgSize.x),
|
var divisorsX = _computeDivisors(imgSize.x),
|
||||||
divisorsY = this._computeDivisors(imgSize.y),
|
divisorsY = _computeDivisors(imgSize.y),
|
||||||
wideSide = Math.max(imgSize.x, imgSize.y),
|
wideSide = Math.max(imgSize.x, imgSize.y),
|
||||||
common = this._computeIntersection(divisorsX, divisorsY),
|
common = _computeIntersection(divisorsX, divisorsY),
|
||||||
nrOfPatchesList = [8, 10, 15, 20, 32, 60, 80],
|
nrOfPatchesList = [8, 10, 15, 20, 32, 60, 80],
|
||||||
nrOfPatchesMap = {
|
nrOfPatchesMap = {
|
||||||
"x-small": 5,
|
"x-small": 5,
|
||||||
@@ -687,15 +690,15 @@ CVUtils.calculatePatchSize = function(patchSize, imgSize) {
|
|||||||
|
|
||||||
optimalPatchSize = findPatchSizeForDivisors(common);
|
optimalPatchSize = findPatchSizeForDivisors(common);
|
||||||
if (!optimalPatchSize) {
|
if (!optimalPatchSize) {
|
||||||
optimalPatchSize = findPatchSizeForDivisors(this._computeDivisors(wideSide));
|
optimalPatchSize = findPatchSizeForDivisors(_computeDivisors(wideSide));
|
||||||
if (!optimalPatchSize) {
|
if (!optimalPatchSize) {
|
||||||
optimalPatchSize = findPatchSizeForDivisors((this._computeDivisors(desiredPatchSize * nrOfPatches)));
|
optimalPatchSize = findPatchSizeForDivisors((_computeDivisors(desiredPatchSize * nrOfPatches)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return optimalPatchSize;
|
return optimalPatchSize;
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils._parseCSSDimensionValues = function(value) {
|
export function _parseCSSDimensionValues(value) {
|
||||||
var dimension = {
|
var dimension = {
|
||||||
value: parseFloat(value),
|
value: parseFloat(value),
|
||||||
unit: value.indexOf("%") === value.length - 1 ? "%" : "%"
|
unit: value.indexOf("%") === value.length - 1 ? "%" : "%"
|
||||||
@@ -704,7 +707,7 @@ CVUtils._parseCSSDimensionValues = function(value) {
|
|||||||
return dimension;
|
return dimension;
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils._dimensionsConverters = {
|
export const _dimensionsConverters = {
|
||||||
top: function(dimension, context) {
|
top: function(dimension, context) {
|
||||||
if (dimension.unit === "%") {
|
if (dimension.unit === "%") {
|
||||||
return Math.floor(context.height * (dimension.value / 100));
|
return Math.floor(context.height * (dimension.value / 100));
|
||||||
@@ -727,13 +730,13 @@ CVUtils._dimensionsConverters = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
CVUtils.computeImageArea = function(inputWidth, inputHeight, area) {
|
export function computeImageArea(inputWidth, inputHeight, area) {
|
||||||
var context = {width: inputWidth, height: inputHeight};
|
var context = {width: inputWidth, height: inputHeight};
|
||||||
|
|
||||||
var parsedArea = Object.keys(area).reduce(function(result, key) {
|
var parsedArea = Object.keys(area).reduce(function(result, key) {
|
||||||
var value = area[key],
|
var value = area[key],
|
||||||
parsed = CVUtils._parseCSSDimensionValues(value),
|
parsed = _parseCSSDimensionValues(value),
|
||||||
calculated = CVUtils._dimensionsConverters[key](parsed, context);
|
calculated = _dimensionsConverters[key](parsed, context);
|
||||||
|
|
||||||
result[key] = calculated;
|
result[key] = calculated;
|
||||||
return result;
|
return result;
|
||||||
@@ -746,5 +749,3 @@ CVUtils.computeImageArea = function(inputWidth, inputHeight, area) {
|
|||||||
sh: parsedArea.bottom - parsedArea.top
|
sh: parsedArea.bottom - parsedArea.top
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export default CVUtils;
|
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
import SubImage from './subImage';
|
import SubImage from './subImage';
|
||||||
import CVUtils from '../common/cv_utils';
|
import {hsv2rgb} from '../common/cv_utils';
|
||||||
import ArrayHelper from '../common/array_helper';
|
import ArrayHelper from '../common/array_helper';
|
||||||
import {vec2} from 'gl-matrix';
|
const vec2 = {
|
||||||
|
clone: require('gl-vec2/clone'),
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a basic image combining the data and size.
|
* Represents a basic image combining the data and size.
|
||||||
@@ -335,7 +337,7 @@ ImageWrapper.prototype.overlay = function(canvas, scale, from) {
|
|||||||
var length = this.data.length;
|
var length = this.data.length;
|
||||||
while (length--) {
|
while (length--) {
|
||||||
hsv[0] = this.data[length] * scale;
|
hsv[0] = this.data[length] * scale;
|
||||||
result = hsv[0] <= 0 ? whiteRgb : hsv[0] >= 360 ? blackRgb : CVUtils.hsv2rgb(hsv, rgb);
|
result = hsv[0] <= 0 ? whiteRgb : hsv[0] >= 360 ? blackRgb : hsv2rgb(hsv, rgb);
|
||||||
data[length * 4 + 0] = result[0];
|
data[length * 4 + 0] = result[0];
|
||||||
data[length * 4 + 1] = result[1];
|
data[length * 4 + 1] = result[1];
|
||||||
data[length * 4 + 2] = result[2];
|
data[length * 4 + 2] = result[2];
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import CVUtils from '../common/cv_utils';
|
|
||||||
import ImageWrapper from '../common/image_wrapper';
|
import ImageWrapper from '../common/image_wrapper';
|
||||||
|
|
||||||
var Bresenham = {};
|
var Bresenham = {};
|
||||||
@@ -90,20 +89,6 @@ Bresenham.getBarcodeLine = function(imageWrapper, p1, p2) {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
Bresenham.toOtsuBinaryLine = function(result) {
|
|
||||||
var line = result.line,
|
|
||||||
image = new ImageWrapper({x: line.length - 1, y: 1}, line),
|
|
||||||
threshold = CVUtils.determineOtsuThreshold(image, 5);
|
|
||||||
|
|
||||||
line = CVUtils.sharpenLine(line);
|
|
||||||
CVUtils.thresholdImage(image, threshold);
|
|
||||||
|
|
||||||
return {
|
|
||||||
line: line,
|
|
||||||
threshold: threshold
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts the result from getBarcodeLine into a binary representation
|
* Converts the result from getBarcodeLine into a binary representation
|
||||||
* also considering the frequency and slope of the signal for more robust results
|
* also considering the frequency and slope of the signal for more robust results
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
const merge = require('lodash/object/merge');
|
import {merge, pick} from 'lodash';
|
||||||
const pick = require('lodash/object/pick');
|
|
||||||
const mapKeys = require('lodash/object/mapKeys');
|
|
||||||
|
|
||||||
var streamRef,
|
var streamRef,
|
||||||
loadedDataHandler;
|
loadedDataHandler;
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
import CVUtils from '../common/cv_utils';
|
import {
|
||||||
|
imageRef,
|
||||||
|
grayAndHalfSampleFromCanvasData,
|
||||||
|
computeGray
|
||||||
|
} from '../common/cv_utils';
|
||||||
|
|
||||||
var FrameGrabber = {};
|
var FrameGrabber = {};
|
||||||
|
|
||||||
FrameGrabber.create = function(inputStream, canvas) {
|
FrameGrabber.create = function(inputStream, canvas) {
|
||||||
var _that = {},
|
var _that = {},
|
||||||
_streamConfig = inputStream.getConfig(),
|
_streamConfig = inputStream.getConfig(),
|
||||||
_video_size = CVUtils.imageRef(inputStream.getRealWidth(), inputStream.getRealHeight()),
|
_video_size = imageRef(inputStream.getRealWidth(), inputStream.getRealHeight()),
|
||||||
_canvasSize = inputStream.getCanvasSize(),
|
_canvasSize = inputStream.getCanvasSize(),
|
||||||
_size = CVUtils.imageRef(inputStream.getWidth(), inputStream.getHeight()),
|
_size = imageRef(inputStream.getWidth(), inputStream.getHeight()),
|
||||||
topRight = inputStream.getTopRight(),
|
topRight = inputStream.getTopRight(),
|
||||||
_sx = topRight.x,
|
_sx = topRight.x,
|
||||||
_sy = topRight.y,
|
_sy = topRight.y,
|
||||||
@@ -55,9 +59,9 @@ FrameGrabber.create = function(inputStream, canvas) {
|
|||||||
_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){
|
||||||
CVUtils.grayAndHalfSampleFromCanvasData(ctxData, _size, _data);
|
grayAndHalfSampleFromCanvasData(ctxData, _size, _data);
|
||||||
} else {
|
} else {
|
||||||
CVUtils.computeGray(ctxData, _data, _streamConfig);
|
computeGray(ctxData, _data, _streamConfig);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,11 +1,30 @@
|
|||||||
import ImageWrapper from '../common/image_wrapper';
|
import ImageWrapper from '../common/image_wrapper';
|
||||||
import CVUtils from '../common/cv_utils';
|
import {
|
||||||
|
calculatePatchSize,
|
||||||
|
otsuThreshold,
|
||||||
|
hsv2rgb,
|
||||||
|
cluster,
|
||||||
|
topGeneric,
|
||||||
|
imageRef,
|
||||||
|
halfSample,
|
||||||
|
computeImageArea
|
||||||
|
} from '../common/cv_utils';
|
||||||
import ArrayHelper from '../common/array_helper';
|
import ArrayHelper from '../common/array_helper';
|
||||||
import ImageDebug from '../common/image_debug';
|
import ImageDebug from '../common/image_debug';
|
||||||
import Rasterizer from './rasterizer';
|
import Rasterizer from './rasterizer';
|
||||||
import Tracer from './tracer';
|
import Tracer from './tracer';
|
||||||
import skeletonizer from './skeletonizer';
|
import skeletonizer from './skeletonizer';
|
||||||
import {vec2, mat2} from 'gl-matrix';
|
const vec2 = {
|
||||||
|
clone: require('gl-vec2/clone'),
|
||||||
|
dot: require('gl-vec2/dot'),
|
||||||
|
scale: require('gl-vec2/scale'),
|
||||||
|
transformMat2: require('gl-vec2/transformMat2')
|
||||||
|
};
|
||||||
|
const mat2 = {
|
||||||
|
copy: require('gl-mat2/copy'),
|
||||||
|
create: require('gl-mat2/create'),
|
||||||
|
invert: require('gl-mat2/invert')
|
||||||
|
}
|
||||||
|
|
||||||
var _config,
|
var _config,
|
||||||
_currentImageWrapper,
|
_currentImageWrapper,
|
||||||
@@ -41,7 +60,7 @@ function initBuffers() {
|
|||||||
_currentImageWrapper = _inputImageWrapper;
|
_currentImageWrapper = _inputImageWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
_patchSize = CVUtils.calculatePatchSize(_config.patchSize, _currentImageWrapper.size);
|
_patchSize = calculatePatchSize(_config.patchSize, _currentImageWrapper.size);
|
||||||
|
|
||||||
_numPatches.x = _currentImageWrapper.size.x / _patchSize.x | 0;
|
_numPatches.x = _currentImageWrapper.size.x / _patchSize.x | 0;
|
||||||
_numPatches.y = _currentImageWrapper.size.y / _patchSize.y | 0;
|
_numPatches.y = _currentImageWrapper.size.y / _patchSize.y | 0;
|
||||||
@@ -117,7 +136,7 @@ function boxFromPatches(patches) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
overAvg = (180 - overAvg) * Math.PI / 180;
|
overAvg = (180 - overAvg) * Math.PI / 180;
|
||||||
transMat = mat2.clone([Math.cos(overAvg), Math.sin(overAvg), -Math.sin(overAvg), Math.cos(overAvg)]);
|
transMat = mat2.copy(mat2.create(), [Math.cos(overAvg), Math.sin(overAvg), -Math.sin(overAvg), Math.cos(overAvg)]);
|
||||||
|
|
||||||
// iterate over patches and rotate by angle
|
// iterate over patches and rotate by angle
|
||||||
for ( i = 0; i < patches.length; i++) {
|
for ( i = 0; i < patches.length; i++) {
|
||||||
@@ -178,7 +197,7 @@ function boxFromPatches(patches) {
|
|||||||
* Creates a binary image of the current image
|
* Creates a binary image of the current image
|
||||||
*/
|
*/
|
||||||
function binarizeImage() {
|
function binarizeImage() {
|
||||||
CVUtils.otsuThreshold(_currentImageWrapper, _binaryImageWrapper);
|
otsuThreshold(_currentImageWrapper, _binaryImageWrapper);
|
||||||
_binaryImageWrapper.zeroBorder();
|
_binaryImageWrapper.zeroBorder();
|
||||||
if (_config.showCanvas) {
|
if (_config.showCanvas) {
|
||||||
_binaryImageWrapper.show(_canvasContainer.dom.binary, 255);
|
_binaryImageWrapper.show(_canvasContainer.dom.binary, 255);
|
||||||
@@ -309,7 +328,7 @@ function findBoxes(topLabels, maxLabel) {
|
|||||||
for ( j = 0; j < patches.length; j++) {
|
for ( j = 0; j < patches.length; j++) {
|
||||||
patch = patches[j];
|
patch = patches[j];
|
||||||
hsv[0] = (topLabels[i].label / (maxLabel + 1)) * 360;
|
hsv[0] = (topLabels[i].label / (maxLabel + 1)) * 360;
|
||||||
CVUtils.hsv2rgb(hsv, rgb);
|
hsv2rgb(hsv, rgb);
|
||||||
ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,
|
ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,
|
||||||
{color: "rgb(" + rgb.join(",") + ")", lineWidth: 2});
|
{color: "rgb(" + rgb.join(",") + ")", lineWidth: 2});
|
||||||
}
|
}
|
||||||
@@ -324,8 +343,8 @@ function findBoxes(topLabels, maxLabel) {
|
|||||||
* @param {Object} moments
|
* @param {Object} moments
|
||||||
*/
|
*/
|
||||||
function similarMoments(moments) {
|
function similarMoments(moments) {
|
||||||
var clusters = CVUtils.cluster(moments, 0.90);
|
var clusters = cluster(moments, 0.90);
|
||||||
var topCluster = CVUtils.topGeneric(clusters, 1, function(e) {
|
var topCluster = topGeneric(clusters, 1, function(e) {
|
||||||
return e.getPoints().length;
|
return e.getPoints().length;
|
||||||
});
|
});
|
||||||
var points = [], result = [];
|
var points = [], result = [];
|
||||||
@@ -339,12 +358,12 @@ function similarMoments(moments) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function skeletonize(x, y) {
|
function skeletonize(x, y) {
|
||||||
_binaryImageWrapper.subImageAsCopy(_subImageWrapper, CVUtils.imageRef(x, y));
|
_binaryImageWrapper.subImageAsCopy(_subImageWrapper, imageRef(x, y));
|
||||||
_skeletonizer.skeletonize();
|
_skeletonizer.skeletonize();
|
||||||
|
|
||||||
// Show skeleton if requested
|
// Show skeleton if requested
|
||||||
if (ENV.development && _config.debug.showSkeleton) {
|
if (ENV.development && _config.debug.showSkeleton) {
|
||||||
_skelImageWrapper.overlay(_canvasContainer.dom.binary, 360, CVUtils.imageRef(x, y));
|
_skelImageWrapper.overlay(_canvasContainer.dom.binary, 360, imageRef(x, y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,7 +515,7 @@ function rasterizeAngularSimilarity(patchesFound) {
|
|||||||
if (_patchLabelGrid.data[j] > 0 && _patchLabelGrid.data[j] <= label) {
|
if (_patchLabelGrid.data[j] > 0 && _patchLabelGrid.data[j] <= label) {
|
||||||
patch = _imageToPatchGrid.data[j];
|
patch = _imageToPatchGrid.data[j];
|
||||||
hsv[0] = (_patchLabelGrid.data[j] / (label + 1)) * 360;
|
hsv[0] = (_patchLabelGrid.data[j] / (label + 1)) * 360;
|
||||||
CVUtils.hsv2rgb(hsv, rgb);
|
hsv2rgb(hsv, rgb);
|
||||||
ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,
|
ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,
|
||||||
{color: "rgb(" + rgb.join(",") + ")", lineWidth: 2});
|
{color: "rgb(" + rgb.join(",") + ")", lineWidth: 2});
|
||||||
}
|
}
|
||||||
@@ -521,7 +540,7 @@ export default {
|
|||||||
boxes;
|
boxes;
|
||||||
|
|
||||||
if (_config.halfSample) {
|
if (_config.halfSample) {
|
||||||
CVUtils.halfSample(_inputImageWrapper, _currentImageWrapper);
|
halfSample(_inputImageWrapper, _currentImageWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
binarizeImage();
|
binarizeImage();
|
||||||
@@ -557,7 +576,7 @@ export default {
|
|||||||
|
|
||||||
// calculate width and height based on area
|
// calculate width and height based on area
|
||||||
if (inputStream.getConfig().area) {
|
if (inputStream.getConfig().area) {
|
||||||
area = CVUtils.computeImageArea(width, height, inputStream.getConfig().area);
|
area = computeImageArea(width, height, inputStream.getConfig().area);
|
||||||
inputStream.setTopRight({x: area.sx, y: area.sy});
|
inputStream.setTopRight({x: area.sx, y: area.sy});
|
||||||
inputStream.setCanvasSize({x: width, y: height});
|
inputStream.setCanvasSize({x: width, y: height});
|
||||||
width = area.sw;
|
width = area.sw;
|
||||||
@@ -569,7 +588,7 @@ export default {
|
|||||||
y: Math.floor(height * halfSample)
|
y: Math.floor(height * halfSample)
|
||||||
};
|
};
|
||||||
|
|
||||||
patchSize = CVUtils.calculatePatchSize(config.patchSize, size);
|
patchSize = calculatePatchSize(config.patchSize, size);
|
||||||
if (ENV.development) {
|
if (ENV.development) {
|
||||||
console.log("Patch-Size: " + JSON.stringify(patchSize));
|
console.log("Patch-Size: " + JSON.stringify(patchSize));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,12 +198,10 @@ function Skeletonizer(stdlib, foreign, buffer) {
|
|||||||
done = ((sum | 0) == 0 | 0);
|
done = ((sum | 0) == 0 | 0);
|
||||||
} while (!done);
|
} while (!done);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
skeletonize: skeletonize
|
skeletonize: skeletonize
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
/* @preserve ASM END */
|
||||||
export default Skeletonizer;
|
export default Skeletonizer;
|
||||||
/* eslint-enable eqeqeq*/
|
/* eslint-enable eqeqeq*/
|
||||||
/* @preserve ASM END */
|
|
||||||
|
|||||||
+5
-4
@@ -6,13 +6,14 @@ import BarcodeDecoder from './decoder/barcode_decoder';
|
|||||||
import Events from './common/events';
|
import Events from './common/events';
|
||||||
import CameraAccess from './input/camera_access';
|
import CameraAccess from './input/camera_access';
|
||||||
import ImageDebug from './common/image_debug';
|
import ImageDebug from './common/image_debug';
|
||||||
import {vec2} from 'gl-matrix';
|
|
||||||
import ResultCollector from './analytics/result_collector';
|
import ResultCollector from './analytics/result_collector';
|
||||||
import Config from './config/config';
|
import Config from './config/config';
|
||||||
import InputStream from 'input_stream';
|
import InputStream from 'input_stream';
|
||||||
import FrameGrabber from 'frame_grabber';
|
import FrameGrabber from 'frame_grabber';
|
||||||
|
import {merge} from 'lodash';
|
||||||
const merge = require('lodash/object/merge');
|
const vec2 = {
|
||||||
|
clone: require('gl-vec2/clone')
|
||||||
|
};
|
||||||
|
|
||||||
var _inputStream,
|
var _inputStream,
|
||||||
_framegrabber,
|
_framegrabber,
|
||||||
@@ -364,7 +365,7 @@ function initWorker(cb) {
|
|||||||
function workerInterface(factory) {
|
function workerInterface(factory) {
|
||||||
/* eslint-disable no-undef*/
|
/* eslint-disable no-undef*/
|
||||||
if (factory) {
|
if (factory) {
|
||||||
var Quagga = factory();
|
var Quagga = factory().default;
|
||||||
if (!Quagga) {
|
if (!Quagga) {
|
||||||
self.postMessage({'event': 'error', message: 'Quagga could not be created'});
|
self.postMessage({'event': 'error', message: 'Quagga could not be created'});
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import BarcodeReader from './barcode_reader';
|
import BarcodeReader from './barcode_reader';
|
||||||
const merge = require('lodash/object/merge');
|
import {merge} from 'lodash';
|
||||||
|
|
||||||
function I2of5Reader(opts) {
|
function I2of5Reader(opts) {
|
||||||
opts = merge(getDefaulConfig(), opts);
|
opts = merge(getDefaulConfig(), opts);
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ module.exports = function(grunt) {
|
|||||||
var code = fs.readFileSync('dist/quagga.js', 'utf-8'),
|
var code = fs.readFileSync('dist/quagga.js', 'utf-8'),
|
||||||
minifiedCode = fs.readFileSync('dist/quagga.min.js', 'utf-8'),
|
minifiedCode = fs.readFileSync('dist/quagga.min.js', 'utf-8'),
|
||||||
commentEnd = '/* @preserve ASM END */',
|
commentEnd = '/* @preserve ASM END */',
|
||||||
moduleFunctionRegex = /function\s*\((\w+,\s*\w+)\)\s*\{\s*\/\* \@preserve ASM BEGIN \*\//,
|
moduleFunctionRegex = /function\s*\((\w+,\s*\w+,\s*\w+)\)\s*\{\s*\/\* \@preserve ASM BEGIN \*\//,
|
||||||
commentStartIdx = code.indexOf("/* @preserve ASM BEGIN */"),
|
commentStartIdx = code.indexOf("/* @preserve ASM BEGIN */"),
|
||||||
asmEndIdxTmp = code.indexOf(commentEnd),
|
asmEndIdxTmp = code.indexOf(commentEnd),
|
||||||
asmEndIdx = code.indexOf("}", asmEndIdxTmp),
|
asmEndIdx = code.indexOf("}", asmEndIdxTmp),
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const Quagga = require('../../src/quagga');
|
const Quagga = require('../../src/quagga').default;
|
||||||
const async = require('async');
|
const async = require('async');
|
||||||
|
|
||||||
describe('decodeSingle', function () {
|
describe('decodeSingle', function () {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const ArrayHelper = require('../../src/common/array_helper');
|
import ArrayHelper from '../../src/common/array_helper';
|
||||||
|
|
||||||
describe('init', function() {
|
describe('init', function() {
|
||||||
it('initializes an array with the given value', function() {
|
it('initializes an array with the given value', function() {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const BarcodeLocator = require('../../src/locator/barcode_locator');
|
import BarcodeLocator from '../../src/locator/barcode_locator';
|
||||||
const Config = require('../../src/config/config');
|
import Config from '../../src/config/config';
|
||||||
const merge = require('lodash/object/merge');
|
import {merge} from 'lodash';
|
||||||
|
|
||||||
describe('checkImageConstraints', function() {
|
describe('checkImageConstraints', function() {
|
||||||
var config,
|
var config,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const CameraAccess = require('../../src/input/camera_access');
|
import CameraAccess from '../../src/input/camera_access';
|
||||||
|
|
||||||
var originalURL,
|
var originalURL,
|
||||||
originalMediaStreamTrack,
|
originalMediaStreamTrack,
|
||||||
|
|||||||
+20
-14
@@ -1,8 +1,14 @@
|
|||||||
const CVUtils = require('../../src/common/cv_utils');
|
const {
|
||||||
|
imageRef,
|
||||||
|
calculatePatchSize,
|
||||||
|
_parseCSSDimensionValues,
|
||||||
|
_dimensionsConverters,
|
||||||
|
computeImageArea
|
||||||
|
} = require('../../src/common/cv_utils');
|
||||||
|
|
||||||
describe('imageRef', function() {
|
describe('imageRef', function() {
|
||||||
it('gets the image Reference for a coordinate', function() {
|
it('gets the image Reference for a coordinate', function() {
|
||||||
var res = CVUtils.imageRef(1, 2);
|
var res = imageRef(1, 2);
|
||||||
expect(res.x).to.equal(1);
|
expect(res.x).to.equal(1);
|
||||||
expect(res.y).to.equal(2);
|
expect(res.y).to.equal(2);
|
||||||
expect(res.toVec2()[0]).to.equal(1);
|
expect(res.toVec2()[0]).to.equal(1);
|
||||||
@@ -12,14 +18,14 @@ describe('imageRef', function() {
|
|||||||
describe('calculatePatchSize', function() {
|
describe('calculatePatchSize', function() {
|
||||||
it('should not throw an error in case of valid image size', function() {
|
it('should not throw an error in case of valid image size', function() {
|
||||||
var expected = {x: 32, y: 32},
|
var expected = {x: 32, y: 32},
|
||||||
patchSize = CVUtils.calculatePatchSize("medium", {x: 640, y: 480});
|
patchSize = calculatePatchSize("medium", {x: 640, y: 480});
|
||||||
|
|
||||||
expect(patchSize).to.be.deep.equal(expected);
|
expect(patchSize).to.be.deep.equal(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should thow an error if image size it not valid', function() {
|
it('should thow an error if image size it not valid', function() {
|
||||||
var expected = {x: 32, y: 32},
|
var expected = {x: 32, y: 32},
|
||||||
patchSize = CVUtils.calculatePatchSize("medium", {x: 640, y: 480});
|
patchSize = calculatePatchSize("medium", {x: 640, y: 480});
|
||||||
|
|
||||||
expect(patchSize).to.be.deep.equal(expected);
|
expect(patchSize).to.be.deep.equal(expected);
|
||||||
});
|
});
|
||||||
@@ -31,7 +37,7 @@ describe('_parseCSSDimensionValues', function() {
|
|||||||
value: 10,
|
value: 10,
|
||||||
unit: "%"
|
unit: "%"
|
||||||
},
|
},
|
||||||
result = CVUtils._parseCSSDimensionValues("10%");
|
result = _parseCSSDimensionValues("10%");
|
||||||
|
|
||||||
expect(result).to.be.deep.equal(expected);
|
expect(result).to.be.deep.equal(expected);
|
||||||
});
|
});
|
||||||
@@ -41,7 +47,7 @@ describe('_parseCSSDimensionValues', function() {
|
|||||||
value: 100,
|
value: 100,
|
||||||
unit: "%"
|
unit: "%"
|
||||||
},
|
},
|
||||||
result = CVUtils._parseCSSDimensionValues("100%");
|
result = _parseCSSDimensionValues("100%");
|
||||||
|
|
||||||
expect(result).to.be.deep.equal(expected);
|
expect(result).to.be.deep.equal(expected);
|
||||||
});
|
});
|
||||||
@@ -51,7 +57,7 @@ describe('_parseCSSDimensionValues', function() {
|
|||||||
value: 0,
|
value: 0,
|
||||||
unit: "%"
|
unit: "%"
|
||||||
},
|
},
|
||||||
result = CVUtils._parseCSSDimensionValues("0%");
|
result = _parseCSSDimensionValues("0%");
|
||||||
|
|
||||||
expect(result).to.be.deep.equal(expected);
|
expect(result).to.be.deep.equal(expected);
|
||||||
});
|
});
|
||||||
@@ -61,7 +67,7 @@ describe('_parseCSSDimensionValues', function() {
|
|||||||
value: 26.3,
|
value: 26.3,
|
||||||
unit: "%"
|
unit: "%"
|
||||||
},
|
},
|
||||||
result = CVUtils._parseCSSDimensionValues("26.3px");
|
result = _parseCSSDimensionValues("26.3px");
|
||||||
|
|
||||||
console.log(result);
|
console.log(result);
|
||||||
expect(result).to.be.deep.equal(expected);
|
expect(result).to.be.deep.equal(expected);
|
||||||
@@ -80,28 +86,28 @@ describe("_dimensionsConverters", function(){
|
|||||||
|
|
||||||
it("should convert a top-value correclty", function() {
|
it("should convert a top-value correclty", function() {
|
||||||
var expected = 48,
|
var expected = 48,
|
||||||
result = CVUtils._dimensionsConverters.top({value: 10, unit: "%"}, context);
|
result = _dimensionsConverters.top({value: 10, unit: "%"}, context);
|
||||||
|
|
||||||
expect(result).to.be.equal(expected);
|
expect(result).to.be.equal(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should convert a right-value correclty", function() {
|
it("should convert a right-value correclty", function() {
|
||||||
var expected = 640 - 128,
|
var expected = 640 - 128,
|
||||||
result = CVUtils._dimensionsConverters.right({value: 20, unit: "%"}, context);
|
result = _dimensionsConverters.right({value: 20, unit: "%"}, context);
|
||||||
|
|
||||||
expect(result).to.be.equal(expected);
|
expect(result).to.be.equal(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should convert a bottom-value correclty", function() {
|
it("should convert a bottom-value correclty", function() {
|
||||||
var expected = 480 - 77,
|
var expected = 480 - 77,
|
||||||
result = CVUtils._dimensionsConverters.bottom({value: 16, unit: "%"}, context);
|
result = _dimensionsConverters.bottom({value: 16, unit: "%"}, context);
|
||||||
|
|
||||||
expect(result).to.be.equal(expected);
|
expect(result).to.be.equal(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should convert a left-value correclty", function() {
|
it("should convert a left-value correclty", function() {
|
||||||
var expected = 57,
|
var expected = 57,
|
||||||
result = CVUtils._dimensionsConverters.left({value: 9, unit: "%"}, context);
|
result = _dimensionsConverters.left({value: 9, unit: "%"}, context);
|
||||||
|
|
||||||
expect(result).to.be.equal(expected);
|
expect(result).to.be.equal(expected);
|
||||||
});
|
});
|
||||||
@@ -115,7 +121,7 @@ describe("computeImageArea", function() {
|
|||||||
sw: 429,
|
sw: 429,
|
||||||
sh: 336
|
sh: 336
|
||||||
},
|
},
|
||||||
result = CVUtils.computeImageArea(640, 480, {
|
result = computeImageArea(640, 480, {
|
||||||
top: "10%",
|
top: "10%",
|
||||||
right: "15%",
|
right: "15%",
|
||||||
bottom: "20%",
|
bottom: "20%",
|
||||||
@@ -132,7 +138,7 @@ describe("computeImageArea", function() {
|
|||||||
sw: 640,
|
sw: 640,
|
||||||
sh: 480
|
sh: 480
|
||||||
},
|
},
|
||||||
result = CVUtils.computeImageArea(640, 480, {
|
result = computeImageArea(640, 480, {
|
||||||
top: "0%",
|
top: "0%",
|
||||||
right: "0%",
|
right: "0%",
|
||||||
bottom: "0%",
|
bottom: "0%",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const Events = require('../../src/common/events');
|
import Events from '../../src/common/events';
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
Events.unsubscribe();
|
Events.unsubscribe();
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const ResultCollector = require('../../src/analytics/result_collector');
|
import ResultCollector from '../../src/analytics/result_collector';
|
||||||
const ImageDebug = require('../../src/common/image_debug');
|
import ImageDebug from '../../src/common/image_debug';
|
||||||
|
|
||||||
var canvasMock,
|
var canvasMock,
|
||||||
imageSize,
|
imageSize,
|
||||||
|
|||||||
+5
-7
@@ -11,16 +11,14 @@ module.exports = {
|
|||||||
loaders: [{
|
loaders: [{
|
||||||
test: /\.jsx?$/,
|
test: /\.jsx?$/,
|
||||||
exclude: /node_modules/,
|
exclude: /node_modules/,
|
||||||
loader: 'babel'
|
loader: 'babel-loader'
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
extensions: ['', '.js', '.jsx'],
|
modules: [
|
||||||
root: path.resolve(__dirname),
|
path.resolve('./src/input/'),
|
||||||
alias: {
|
'node_modules'
|
||||||
'input_stream$': 'src/input/input_stream',
|
]
|
||||||
'frame_grabber$': 'src/input/frame_grabber'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
path: __dirname + '/dist',
|
path: __dirname + '/dist',
|
||||||
|
|||||||
Vendored
+15
-3
@@ -1,9 +1,21 @@
|
|||||||
var webpack = require('webpack');
|
var webpack = require('webpack');
|
||||||
module.exports = require('./webpack.config.js');
|
module.exports = require('./webpack.config.js');
|
||||||
|
|
||||||
module.exports.plugins.unshift(
|
module.exports.plugins = module.exports.plugins.concat([
|
||||||
new webpack.optimize.UglifyJsPlugin()
|
new webpack.LoaderOptionsPlugin({
|
||||||
);
|
minimize: true,
|
||||||
|
debug: false
|
||||||
|
}),
|
||||||
|
new webpack.optimize.UglifyJsPlugin({
|
||||||
|
compress: {
|
||||||
|
warnings: false
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
comments: /@preserve/
|
||||||
|
},
|
||||||
|
sourceMap: false
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
|
||||||
module.exports.output.filename = 'quagga.min.js';
|
module.exports.output.filename = 'quagga.min.js';
|
||||||
|
|
||||||
|
|||||||
@@ -4,12 +4,10 @@ var webpack = require('webpack'),
|
|||||||
module.exports = require('./webpack.config.js');
|
module.exports = require('./webpack.config.js');
|
||||||
|
|
||||||
module.exports.resolve = {
|
module.exports.resolve = {
|
||||||
extensions: ['', '.js', '.jsx'],
|
modules: [
|
||||||
root: path.resolve(__dirname),
|
path.resolve('./lib/'),
|
||||||
alias: {
|
'node_modules'
|
||||||
'input_stream': 'lib/input_stream',
|
]
|
||||||
'frame_grabber': 'lib/frame_grabber'
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.externals = [
|
module.exports.externals = [
|
||||||
@@ -19,7 +17,8 @@ module.exports.externals = [
|
|||||||
"ndarray",
|
"ndarray",
|
||||||
"ndarray-linear-interpolate"
|
"ndarray-linear-interpolate"
|
||||||
];
|
];
|
||||||
module.exports.output.libraryTarget = "commonjs2";
|
module.exports.output.libraryTarget = "umd";
|
||||||
|
module.exports.output.library = "Quagga";
|
||||||
module.exports.plugins = [
|
module.exports.plugins = [
|
||||||
new webpack.DefinePlugin({
|
new webpack.DefinePlugin({
|
||||||
ENV: require(path.join(__dirname, './env/', process.env.BUILD_ENV))
|
ENV: require(path.join(__dirname, './env/', process.env.BUILD_ENV))
|
||||||
|
|||||||
Reference in New Issue
Block a user