From 05e6b46121fb2ecb3c0c971637738ae47807fa19 Mon Sep 17 00:00:00 2001 From: Alexei Domratchev Date: Thu, 1 Aug 2019 16:29:53 -0400 Subject: [PATCH] Converted to TypeScript Upgraded tools: Webpack 4.38, Babel 7.5, Karma 4.2, Chai 4.2, Sinon 7.3 Removed redundant files Removed all 3rd party dependencies for Web version Changed ImageDebug API Changed Box interface to be [Point, Point, Point, Point] Improved performance by utilizing ES6+ features, bitwise operators, etc. Added support for area measured in pixels (px) --- .DS_Store | Bin 0 -> 6148 bytes .babelrc | 52 +- .eslintrc | 107 +- Gruntfile.js | 21 - README.md | 94 +- bower.json | 68 - build/end.frag | 2 - build/start.frag | 11 - dist/quagga.d.ts | 1115 + dist/quagga.js | 17289 +++++++--------- dist/quagga.min.js | 2 +- dist/quagga.node.js | 2 + env/development.js | 5 - env/node.js | 5 - env/production.js | 5 - example/camera_example.html | 129 +- example/file_input.html | 197 +- example/file_input.js | 110 +- example/live_w_locator.js | 180 +- example/node-test-with-buffer.js | 20 +- example/node-test.js | 20 +- example/static_images.js | 107 +- karma-integration.conf.js | 63 +- karma.conf.js | 65 +- lib/frame_grabber.js | 95 - lib/input_stream.js | 153 - lib/quagga.js | 11396 ---------- package-lock.json | 10519 ++++++++++ package.json | 125 +- plugins/umd.js | 72 +- src/analytics/result-collector.ts | 63 + src/analytics/result_collector.js | 57 - src/common/array_helper.js | 79 - src/common/box.ts | 3 + src/common/cluster.js | 68 - src/common/cluster.ts | 60 + src/common/cv_utils.js | 751 - src/common/events.js | 94 - src/common/events.ts | 85 + src/common/hsv2rgb.ts | 43 + src/common/image-debug.ts | 39 + src/common/image-wrapper.ts | 244 + src/common/image_debug.js | 41 - src/common/image_wrapper.js | 349 - src/common/media-devices.ts | 14 + src/common/mediaDevices.js | 17 - src/common/merge.ts | 31 + src/common/moment.ts | 12 + src/common/point.ts | 4 + src/common/polyfills.ts | 21 + src/common/subImage.js | 90 - src/common/typedefs.js | 51 - src/config/{config.dev.js => config.dev.ts} | 22 +- src/config/config.js | 11 - src/config/{config.node.js => config.node.ts} | 16 +- src/config/config.prod.js | 31 - src/config/config.ts | 51 + src/decoder/barcode-decoder.ts | 317 + src/decoder/barcode_decoder.js | 322 - src/decoder/bresenham.js | 198 - src/decoder/bresenham.ts | 158 + src/input/camera-access.ts | 98 + src/input/camera_access.js | 119 - src/input/exif-helper.ts | 110 + src/input/exif_helper.js | 146 - src/input/frame-grabber.node.ts | 129 + src/input/frame-grabber.ts | 161 + src/input/frame_grabber.js | 122 - src/input/image-loader.ts | 67 + src/input/image-stream.node.ts | 96 + src/input/image-stream.ts | 118 + src/input/image_loader.js | 71 - src/input/input-stream-config.ts | 23 + src/input/input-stream-utils.ts | 169 + src/input/input-stream.ts | 102 + src/input/input_stream.js | 330 - src/input/live-stream.ts | 12 + src/input/video-stream.ts | 104 + src/locator/barcode-locator-config.ts | 71 + src/locator/barcode-locator-utils.ts | 135 + src/locator/barcode-locator.ts | 494 + src/locator/barcode_locator.js | 607 - src/locator/rasterizer.js | 195 - src/locator/rasterizer.ts | 188 + src/locator/skeletonizer.js | 19 +- src/locator/tracer.js | 101 - src/locator/tracer.ts | 117 + src/quagga.js | 543 - src/quagga.ts | 489 + src/reader/2of5-reader.ts | 177 + src/reader/2of5_reader.js | 257 - src/reader/barcode-reader.ts | 274 + src/reader/barcode_reader.js | 245 - src/reader/codabar-reader.ts | 281 + src/reader/codabar_reader.js | 288 - src/reader/code-128-reader.ts | 459 + src/reader/code-39-reader.ts | 170 + src/reader/code-39-vin-reader.ts | 48 + src/reader/code-93-reader.ts | 239 + src/reader/code_128_reader.js | 463 - src/reader/code_39_reader.js | 188 - src/reader/code_39_vin_reader.js | 51 - src/reader/code_93_reader.js | 251 - src/reader/ean-2-reader.ts | 47 + src/reader/ean-5-reader.ts | 80 + src/reader/ean-8-reader.ts | 42 + src/reader/ean-reader.ts | 313 + src/reader/ean_2_reader.js | 51 - src/reader/ean_5_reader.js | 84 - src/reader/ean_8_reader.js | 45 - src/reader/ean_reader.js | 385 - src/reader/i2of5-reader.ts | 218 + src/reader/i2of5_reader.js | 325 - src/reader/index.ts | 29 + src/reader/upc-e-reader.ts | 91 + src/reader/upc-reader.ts | 21 + src/reader/upc_e_reader.js | 103 - src/reader/upc_reader.js | 24 - tasks/uglyasm.js | 61 - test/fixtures/.DS_Store | Bin 0 -> 6148 bytes test/fixtures/code_128/image-011.gif | Bin 0 -> 3977 bytes test/integration/integration.spec.js | 381 - test/integration/integration.spec.ts | 364 + test/mocks/mediaDevices.js | 36 - test/spec/array_helper.spec.js | 53 - test/spec/barcode_locator.spec.js | 130 - test/spec/camera-access.spec.ts | 161 + test/spec/camera_access.spec.js | 158 - test/spec/cv_utils.spec.js | 150 - test/spec/events.spec.js | 114 - test/spec/events.spec.ts | 111 + ...xif_helper.spec.js => exif-helper.spec.ts} | 63 +- test/spec/input-stream-utils.spec.ts | 260 + test/spec/result-collector.spec.ts | 136 + test/spec/result_collector.spec.js | 106 - test/test-main-integration.js | 8 - test/test-main.js | 8 - tsconfig.json | 16 + type-definitions/quagga.d.ts | 530 - server.pem => utils/server.pem | 0 .../simple-https-server.py | 0 webpack.config.js | 45 +- webpack.config.min.js | 20 - webpack.node.config.js | 29 - webpack.node.js | 37 + webpack.prod.js | 16 + 146 files changed, 27331 insertions(+), 31218 deletions(-) create mode 100644 .DS_Store delete mode 100644 Gruntfile.js delete mode 100644 bower.json delete mode 100644 build/end.frag delete mode 100644 build/start.frag create mode 100644 dist/quagga.d.ts create mode 100644 dist/quagga.node.js delete mode 100644 env/development.js delete mode 100644 env/node.js delete mode 100644 env/production.js delete mode 100644 lib/frame_grabber.js delete mode 100644 lib/input_stream.js delete mode 100644 lib/quagga.js create mode 100644 package-lock.json create mode 100644 src/analytics/result-collector.ts delete mode 100644 src/analytics/result_collector.js delete mode 100644 src/common/array_helper.js create mode 100644 src/common/box.ts delete mode 100644 src/common/cluster.js create mode 100644 src/common/cluster.ts delete mode 100644 src/common/cv_utils.js delete mode 100644 src/common/events.js create mode 100644 src/common/events.ts create mode 100644 src/common/hsv2rgb.ts create mode 100644 src/common/image-debug.ts create mode 100644 src/common/image-wrapper.ts delete mode 100644 src/common/image_debug.js delete mode 100644 src/common/image_wrapper.js create mode 100644 src/common/media-devices.ts delete mode 100644 src/common/mediaDevices.js create mode 100644 src/common/merge.ts create mode 100644 src/common/moment.ts create mode 100644 src/common/point.ts create mode 100644 src/common/polyfills.ts delete mode 100644 src/common/subImage.js delete mode 100644 src/common/typedefs.js rename src/config/{config.dev.js => config.dev.ts} (72%) delete mode 100644 src/config/config.js rename src/config/{config.node.js => config.node.ts} (56%) delete mode 100644 src/config/config.prod.js create mode 100644 src/config/config.ts create mode 100644 src/decoder/barcode-decoder.ts delete mode 100644 src/decoder/barcode_decoder.js delete mode 100644 src/decoder/bresenham.js create mode 100644 src/decoder/bresenham.ts create mode 100644 src/input/camera-access.ts delete mode 100644 src/input/camera_access.js create mode 100644 src/input/exif-helper.ts delete mode 100644 src/input/exif_helper.js create mode 100644 src/input/frame-grabber.node.ts create mode 100644 src/input/frame-grabber.ts delete mode 100644 src/input/frame_grabber.js create mode 100644 src/input/image-loader.ts create mode 100644 src/input/image-stream.node.ts create mode 100644 src/input/image-stream.ts delete mode 100644 src/input/image_loader.js create mode 100644 src/input/input-stream-config.ts create mode 100644 src/input/input-stream-utils.ts create mode 100644 src/input/input-stream.ts delete mode 100644 src/input/input_stream.js create mode 100644 src/input/live-stream.ts create mode 100644 src/input/video-stream.ts create mode 100644 src/locator/barcode-locator-config.ts create mode 100644 src/locator/barcode-locator-utils.ts create mode 100644 src/locator/barcode-locator.ts delete mode 100644 src/locator/barcode_locator.js delete mode 100644 src/locator/rasterizer.js create mode 100644 src/locator/rasterizer.ts delete mode 100644 src/locator/tracer.js create mode 100644 src/locator/tracer.ts delete mode 100644 src/quagga.js create mode 100644 src/quagga.ts create mode 100644 src/reader/2of5-reader.ts delete mode 100644 src/reader/2of5_reader.js create mode 100644 src/reader/barcode-reader.ts delete mode 100644 src/reader/barcode_reader.js create mode 100644 src/reader/codabar-reader.ts delete mode 100644 src/reader/codabar_reader.js create mode 100644 src/reader/code-128-reader.ts create mode 100644 src/reader/code-39-reader.ts create mode 100644 src/reader/code-39-vin-reader.ts create mode 100644 src/reader/code-93-reader.ts delete mode 100644 src/reader/code_128_reader.js delete mode 100644 src/reader/code_39_reader.js delete mode 100644 src/reader/code_39_vin_reader.js delete mode 100644 src/reader/code_93_reader.js create mode 100644 src/reader/ean-2-reader.ts create mode 100644 src/reader/ean-5-reader.ts create mode 100644 src/reader/ean-8-reader.ts create mode 100644 src/reader/ean-reader.ts delete mode 100644 src/reader/ean_2_reader.js delete mode 100644 src/reader/ean_5_reader.js delete mode 100644 src/reader/ean_8_reader.js delete mode 100644 src/reader/ean_reader.js create mode 100644 src/reader/i2of5-reader.ts delete mode 100644 src/reader/i2of5_reader.js create mode 100644 src/reader/index.ts create mode 100644 src/reader/upc-e-reader.ts create mode 100644 src/reader/upc-reader.ts delete mode 100644 src/reader/upc_e_reader.js delete mode 100644 src/reader/upc_reader.js delete mode 100644 tasks/uglyasm.js create mode 100644 test/fixtures/.DS_Store create mode 100644 test/fixtures/code_128/image-011.gif delete mode 100644 test/integration/integration.spec.js create mode 100644 test/integration/integration.spec.ts delete mode 100644 test/mocks/mediaDevices.js delete mode 100644 test/spec/array_helper.spec.js delete mode 100644 test/spec/barcode_locator.spec.js create mode 100644 test/spec/camera-access.spec.ts delete mode 100644 test/spec/camera_access.spec.js delete mode 100644 test/spec/cv_utils.spec.js delete mode 100644 test/spec/events.spec.js create mode 100644 test/spec/events.spec.ts rename test/spec/{exif_helper.spec.js => exif-helper.spec.ts} (89%) create mode 100644 test/spec/input-stream-utils.spec.ts create mode 100644 test/spec/result-collector.spec.ts delete mode 100644 test/spec/result_collector.spec.js delete mode 100644 test/test-main-integration.js delete mode 100644 test/test-main.js create mode 100644 tsconfig.json delete mode 100644 type-definitions/quagga.d.ts rename server.pem => utils/server.pem (100%) rename simple-https-server.py => utils/simple-https-server.py (100%) delete mode 100644 webpack.config.min.js delete mode 100644 webpack.node.config.js create mode 100644 webpack.node.js create mode 100644 webpack.prod.js diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9498e50bca478ef0f2ba7e5825a2b5c01a58d1cb GIT binary patch literal 6148 zcmeH~F^&@<^#q<|Dyh64V5D0F8{w$Au;FvJKz4lIXp9kT>kyg=4u>tuyyIXzgm zT8trHk9M-;bv4;Kdpj(L56e57Pcby>?XbdxW;LK71*E`CfmP2(KmYgizvlm0i&7~d z1>Q^n8+M1?mM@iO>&xqT{g_o>H#!-YGd%qSF!7^!Ll5JA@da6vt&Installing -QuaggaJS can be installed using __npm__, __bower__, or by including it with -the __script__ tag. +QuaggaJS can be installed using __npm__ or by including it with the __script__ tag. ### NPM @@ -115,14 +114,6 @@ Currently, the full functionality is only available through the browser. When using QuaggaJS within __node__, only file-based decoding is available. See the example for [node_examples](#node-example). -### Bower - -You can also install QuaggaJS through __bower__: - -```console -> bower install quagga -``` - ### Script-Tag Anno 1998 You can simply include `dist/quagga.min.js` in your project and you are ready @@ -181,19 +172,19 @@ node. ```javascript Quagga.init({ inputStream : { - name : "Live", - type : "LiveStream", + name : 'Live', + type : 'LiveStream', target: document.querySelector('#yourElement') // Or '#yourElement' (optional) }, decoder : { - readers : ["code_128_reader"] + readers : ['code_128_reader'] } - }, function(err) { + }, function (err) { if (err) { console.log(err); return } - console.log("Initialization finished. Ready to start"); + console.log('Initialization finished. Ready to start'); Quagga.start(); }); ``` @@ -475,7 +466,7 @@ supplements you have to provide them in the configuration as followed: ```javascript decoder: { readers: [{ - format: "ean_reader", + format: 'ean_reader', config: { supplements: [ 'ean_5_reader', 'ean_2_reader' @@ -508,7 +499,7 @@ Only two properties are relevant for the use in Quagga (`halfSample` and ```javascript { halfSample: true, - patchSize: "medium", // x-small, small, medium, large, x-large + patchSize: 'medium', // x-small, small, medium, large, x-large debug: { showCanvas: false, showPatches: false, @@ -552,43 +543,43 @@ locating-mechanism for more robust results. ```javascript Quagga.decodeSingle({ decoder: { - readers: ["code_128_reader"] // List of active readers + readers: ['code_128_reader'] // List of active readers }, locate: true, // try to locate the barcode in the image src: '/test/fixtures/code_128/image-001.jpg' // or 'data:image/jpg;base64,' + data -}, function(result){ - if(result.codeResult) { - console.log("result", result.codeResult.code); +}, function (result) { + if (result.codeResult) { + console.log('result', result.codeResult.code); } else { - console.log("not detected"); + console.log('not detected'); } }); ``` ### Using node -The following example illustrates the use of QuaggaJS within a node -environment. It's almost identical to the browser version with the difference -that node does not support web-workers out of the box. Therefore the config +The following example illustrates the use of QuaggaJS within a node environment. +It's almost identical to the browser version with the difference +that node does not support web workers out of the box. Therefore the config property `numOfWorkers` must be explicitly set to `0`. ```javascript var Quagga = require('quagga').default; Quagga.decodeSingle({ - src: "image-abc-123.jpg", + src: 'image-abc-123.jpg', numOfWorkers: 0, // Needs to be 0 when used within node inputStream: { - size: 800 // restrict input-size to be 800px in width (long-side) + size: 800 // restrict input size to be 800px in width (long side) }, decoder: { - readers: ["code_128_reader"] // List of active readers + readers: ['code_128_reader'] // List of active readers }, }, function(result) { if(result.codeResult) { - console.log("result", result.codeResult.code); + console.log('result', result.codeResult.code); } else { - console.log("not detected"); + console.log('not detected'); } }); ``` @@ -601,11 +592,11 @@ A growing collection of tips & tricks to improve the various aspects of Quagga. Barcodes too far away from the camera, or a lens too close to the object result in poor recognition rates and Quagga might respond with a lot of -false-positives. +false positives. Starting in Chrome 59 you can now make use of `capabilities` and directly control the zoom of the camera. Head over to the -[web-cam demo](https://serratus.github.io/quaggaJS/examples/live_w_locator.html) +[web cam demo](https://serratus.github.io/quaggaJS/examples/live_w_locator.html) and check out the __Zoom__ feature. You can read more about those `capabilities` in @@ -618,7 +609,7 @@ recognition logic. Since Chrome 59 you can turn on/off the __Torch__ of our device and vastly improve the quality of the images. Head over to the -[web-cam demo](https://serratus.github.io/quaggaJS/examples/live_w_locator.html) +[web cam demo](https://serratus.github.io/quaggaJS/examples/live_w_locator.html) and check out the __Torch__ feature. To find out more about this feature [read on](https://www.oberhofer.co/mediastreamtrack-and-its-capabilities). @@ -626,8 +617,8 @@ To find out more about this feature [read on](https://www.oberhofer.co/mediastre ## Tests Unit Tests can be run with [Karma][karmaUrl] and written using -[Mocha][mochaUrl], [Chai][chaiUrl] and [SinonJS][sinonUrl]. Coverage reports are -automatically generated in the coverage/ folder. +[Mocha][mochaUrl], [Chai][chaiUrl] and [SinonJS][sinonUrl]. +Coverage reports are automatically generated in the coverage/ folder. ```console > npm install @@ -639,7 +630,7 @@ In case you want to take a deeper dive into the inner workings of Quagga, get to know the _debugging_ capabilities of the current implementation. The various flags exposed through the `config` object give you the abilily to visualize almost every step in the processing. Because of the introduction of the -web-workers, and their restriction not to have access to the DOM, the +web workers, and their restriction not to have access to the DOM, the configuration must be explicitly set to `config.numOfWorkers = 0` in order to work. @@ -652,19 +643,19 @@ bugs in the implementation. ### Creating a ``ResultCollector`` -You can easily create a new ``ResultCollector`` by calling its ``create`` -method with a configuration. +You can easily create a new ``ResultCollector`` by calling its constructor +with a configuration. ```javascript -var resultCollector = Quagga.ResultCollector.create({ +const resultCollector = new Quagga.ResultCollector({ capture: true, // keep track of the image producing this result capacity: 20, // maximum number of results to store blacklist: [ // list containing codes which should not be recorded - {code: "3574660239843", format: "ean_13"}], - filter: function(codeResult) { + {code: '3574660239843', format: 'ean_13'}], + filter: function (codeResult) { // only store results which match this constraint // returns true/false - // e.g.: return codeResult.format === "ean_13"; + // e.g.: return codeResult.format === 'ean_13'; return true; } }); @@ -684,7 +675,7 @@ do not fit into a certain schema. Calling ``getResults`` on the ```javascript { codeResult: {}, // same as in onDetected event - frame: "data:image/png;base64,iVBOR..." // dataURL of the gray-scaled image + frame: 'data:image/png;base64,iVBOR...' // dataURL of the gray-scaled image } ``` @@ -705,6 +696,18 @@ on the ``singleChannel`` flag in the configuration when using ``decodeSingle``. ## Changelog +### 2019-07-31 +- Internal Changes + - Converted to TypeScript + - Upgraded tooling to Webpack 4.38, Babel 7.5, Karma 4.2, Chai 4.2, Sinon 7.3 + - Removed redundant files +- Improvements + - Removed all 3rd party dependencies for Web version + - Changed ImageDebug API + - Changed ``Box`` interface to be ``[Point, Point, Point, Point]`` + - Improved performance by utilizing ES2015+ features, bitwise operators, etc. + - Added support for ``area`` measured in pixels (px) + ### 2017-06-07 - Improvements - added `muted` and `playsinline` to `