@gueshbzh-perso/scanner 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -2
- package/dist/core.d.ts +12 -4
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +24 -11
- package/dist/core.js.map +1 -1
- package/dist/engine.d.ts +13 -2
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +24 -4
- package/dist/engine.js.map +1 -1
- package/dist/native.d.ts +43 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +107 -0
- package/dist/native.js.map +1 -0
- package/dist/reader.d.ts +40 -1
- package/dist/reader.d.ts.map +1 -1
- package/dist/reader.js +186 -30
- package/dist/reader.js.map +1 -1
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/wasm/scanner_wasm.d.ts +20 -0
- package/dist/wasm/scanner_wasm.js +53 -0
- package/dist/wasm/scanner_wasm_bg.wasm +0 -0
- package/dist/wasm/scanner_wasm_bg.wasm.d.ts +2 -0
- package/package.json +1 -1
- package/src/core.ts +24 -11
- package/src/engine.ts +43 -5
- package/src/native.ts +140 -0
- package/src/reader.ts +205 -34
- package/src/types.ts +15 -0
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ await reader.destroy(); // removes the preview, frees the engine
|
|
|
51
51
|
| `camera` | `{ facingMode: 'environment', resolution: 'hd' }` | Also `deviceId`, `rememberDevice` (default `true`), `releaseWhenHidden` (default `true`: the camera is released while the page is hidden and reopened when it is visible again). |
|
|
52
52
|
| `overlay` | all on | `showRegion`, `showDetections`, `showTorchButton`, `showCameraSwitch`, `color`, or `false`. |
|
|
53
53
|
| `feedback` | beep + vibrate | `{ beep, vibrate }` or `false`. |
|
|
54
|
-
| `processing` | `{ maxDimension: 1024, backend: 'auto' }` | Decoder image size; `'webgl'`, `'canvas'` or `'auto'
|
|
54
|
+
| `processing` | `{ maxDimension: 1024, backend: 'auto', nativeDetector: 'auto' }` | Decoder image size; `'webgl'`, `'canvas'` or `'auto'`; `nativeDetector: 'auto'` uses the browser's `BarcodeDetector` as the fast pass where it exists, `'off'` always uses the engine alone (see [How it works](#how-it-works)). |
|
|
55
55
|
| `worker` | `true` | Decode in Web Workers; falls back to the main thread if unavailable. |
|
|
56
56
|
| `workers` | cores − 1 (1–3) | Number of decoding workers: frames are decoded in parallel. |
|
|
57
57
|
| `wasmUrl`, `workerUrl` | auto | Override asset URLs (CDN, custom bundler setup). |
|
|
@@ -64,7 +64,7 @@ await reader.destroy(); // removes the preview, frees the engine
|
|
|
64
64
|
- `setRegionOfInterest(region)`
|
|
65
65
|
- `setTorch(on)`, `torchAvailable`, `setZoom(zoom)`, `switchCamera(deviceId?)`, `BarcodeReader.listCameras()`
|
|
66
66
|
- `clearCooldown(text)` — allow a code to be reported again immediately
|
|
67
|
-
- `stats` — `{ fps, decodeMs, grabMs, frameWidth, frameHeight, backend, worker, workers }`
|
|
67
|
+
- `stats` — `{ fps, decodeMs, grabMs, frameWidth, frameHeight, backend, worker, workers, native, nativeMs }`
|
|
68
68
|
- `video` — the underlying `<video>` element
|
|
69
69
|
|
|
70
70
|
Detection points are in video pixels (`video.videoWidth` space).
|
|
@@ -139,6 +139,19 @@ overlay (ROI mask, highlights, torch / camera buttons) · beep · vibration
|
|
|
139
139
|
- If WebGL2 is missing or the context is lost, the pipeline switches to Canvas 2D.
|
|
140
140
|
- If the engine crashes, the worker is restarted transparently.
|
|
141
141
|
- The engine is downloaded and compiled once, then shared by every worker.
|
|
142
|
+
- By default (`processing.nativeDetector: 'auto'`), browsers that ship a native
|
|
143
|
+
`BarcodeDetector` (Chrome on Android, macOS and ChromeOS) search each video
|
|
144
|
+
frame with it, straight from the `<video>`: no grab, no worker. While it
|
|
145
|
+
finds nothing, the workers still decode a frame from time to time (~3 per
|
|
146
|
+
second) with the fallback strategies, which read the hard codes (laser
|
|
147
|
+
engraving, shadows…) the native decoder has no preprocessing for. Its codes get the
|
|
148
|
+
same multi-frame confirmation and de-duplication. It is used only when it
|
|
149
|
+
supports every requested format (`micro_qr`, which it lacks, is then read
|
|
150
|
+
by the fallbacks), and dropped for the engine alone if it ever fails.
|
|
151
|
+
Detection is by feature, not by browser: any browser that ships the API
|
|
152
|
+
gets it, but a JavaScript polyfill of `BarcodeDetector` is ignored (it
|
|
153
|
+
would only be a slower engine on the main thread). Safari, Firefox and
|
|
154
|
+
Chrome on Windows / Linux do not have it today: nothing changes there.
|
|
142
155
|
|
|
143
156
|
## Browser support
|
|
144
157
|
|
package/dist/core.d.ts
CHANGED
|
@@ -25,12 +25,20 @@ export interface FrameOutcome {
|
|
|
25
25
|
export declare class SessionCore {
|
|
26
26
|
private session;
|
|
27
27
|
configure(options: EngineOptions): void;
|
|
28
|
-
/**
|
|
29
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Strategy plan of the next frame, for a `DecoderCore` configured the same
|
|
30
|
+
* way. `fastPath: false` when the native `BarcodeDetector` already searched
|
|
31
|
+
* the frame: the decoder then runs the fallback strategy only.
|
|
32
|
+
*/
|
|
33
|
+
plan(fastPath?: boolean): FramePlan;
|
|
30
34
|
/** Record a decoded frame; returns the new codes and the live ones. */
|
|
31
35
|
commit(report: FrameReport): FrameOutcome;
|
|
32
|
-
/**
|
|
33
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Record codes read by the native `BarcodeDetector`: same format filter,
|
|
38
|
+
* confirmation and de-duplication as decoded frames. Points are kept as
|
|
39
|
+
* given (video pixels).
|
|
40
|
+
*/
|
|
41
|
+
commitExternal(codes: Detection[], elapsedMs: number): FrameOutcome;
|
|
34
42
|
reset(): void;
|
|
35
43
|
clearCooldown(text: string): void;
|
|
36
44
|
destroy(): void;
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9G,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3D,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AAEvC,kEAAkE;AAClE,wBAAgB,cAAc,IAAI,GAAG,CAEpC;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAQhF;AAID,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGnF;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAGjE;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,cAAc,CASlG;AAYD,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,SAAS,CAIpD;AAQD,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC5B,wEAAwE;IACxE,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qEAAqE;AACrE,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAgC;IAE/C,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKvC;;;;OAIG;IACH,IAAI,CAAC,QAAQ,UAAO,GAAG,SAAS;IAKhC,uEAAuE;IACvE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY;IAOzC;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY;IAOnE,KAAK,IAAI,IAAI;IAIb,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjC,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,MAAM;CAIf;AAED,+EAA+E;AAC/E,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,QAAQ,CAAkC;IAElD,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKvC,MAAM,CACJ,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,SAAS,GACd,WAAW;IAOd,8DAA8D;IAC9D,IAAI,CACF,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,aAAa,GACrB,SAAS,EAAE;IAiBd,OAAO,IAAI,IAAI;CAMhB"}
|
package/dist/core.js
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
// - `SessionCore`: the session. Cheap calls (`plan`, `commit`), main thread.
|
|
7
7
|
// - `DecoderCore`: the expensive decoding, one per Web Worker.
|
|
8
8
|
// The inline engine (no Worker support) uses both on the main thread.
|
|
9
|
+
// Codes read by the browser's native `BarcodeDetector` enter the session with
|
|
10
|
+
// `SessionCore.commitExternal` (see `native.ts`).
|
|
9
11
|
import init, { WasmFrameDecoder, WasmScanner, WasmScanSession, version } from './wasm/scanner_wasm.js';
|
|
10
12
|
/** Default location of the engine binary, next to this module. */
|
|
11
13
|
export function defaultWasmUrl() {
|
|
@@ -66,6 +68,12 @@ export function toDetection(r) {
|
|
|
66
68
|
d.rawBytes = r.rawBytes;
|
|
67
69
|
return d;
|
|
68
70
|
}
|
|
71
|
+
function toScanResult(d) {
|
|
72
|
+
const r = { text: d.text, format: d.format, points: d.points, timestampMs: d.timestamp };
|
|
73
|
+
if (d.rawBytes)
|
|
74
|
+
r.rawBytes = d.rawBytes;
|
|
75
|
+
return r;
|
|
76
|
+
}
|
|
69
77
|
/** The scan session of a camera stream (state only, cheap calls). */
|
|
70
78
|
export class SessionCore {
|
|
71
79
|
constructor() {
|
|
@@ -75,9 +83,14 @@ export class SessionCore {
|
|
|
75
83
|
this.session?.free();
|
|
76
84
|
this.session = new WasmScanSession(streamConfig(options));
|
|
77
85
|
}
|
|
78
|
-
/**
|
|
79
|
-
|
|
80
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Strategy plan of the next frame, for a `DecoderCore` configured the same
|
|
88
|
+
* way. `fastPath: false` when the native `BarcodeDetector` already searched
|
|
89
|
+
* the frame: the decoder then runs the fallback strategy only.
|
|
90
|
+
*/
|
|
91
|
+
plan(fastPath = true) {
|
|
92
|
+
const session = this.active();
|
|
93
|
+
return fastPath ? session.plan() : session.planFallbackOnly();
|
|
81
94
|
}
|
|
82
95
|
/** Record a decoded frame; returns the new codes and the live ones. */
|
|
83
96
|
commit(report) {
|
|
@@ -86,16 +99,16 @@ export class SessionCore {
|
|
|
86
99
|
const results = fresh ? fresh.map(toDetection) : null;
|
|
87
100
|
return { results, live: results ?? session.lastDetections.map(toDetection), decodeMs: report.elapsedMs };
|
|
88
101
|
}
|
|
89
|
-
/**
|
|
90
|
-
|
|
102
|
+
/**
|
|
103
|
+
* Record codes read by the native `BarcodeDetector`: same format filter,
|
|
104
|
+
* confirmation and de-duplication as decoded frames. Points are kept as
|
|
105
|
+
* given (video pixels).
|
|
106
|
+
*/
|
|
107
|
+
commitExternal(codes, elapsedMs) {
|
|
91
108
|
const session = this.active();
|
|
92
|
-
|
|
93
|
-
session.frameBuffer(pixels.length).set(pixels);
|
|
94
|
-
const t0 = performance.now();
|
|
95
|
-
const fresh = session.processFrameBuffer(width, height, format);
|
|
96
|
-
const decodeMs = performance.now() - t0;
|
|
109
|
+
const fresh = session.commitExternal(codes.map(toScanResult), elapsedMs);
|
|
97
110
|
const results = fresh ? fresh.map(toDetection) : null;
|
|
98
|
-
return { results, live: results ?? session.lastDetections.map(toDetection), decodeMs };
|
|
111
|
+
return { results, live: results ?? session.lastDetections.map(toDetection), decodeMs: elapsedMs };
|
|
99
112
|
}
|
|
100
113
|
reset() {
|
|
101
114
|
this.session?.reset();
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FrameOutcome } from './core.js';
|
|
1
2
|
import type { PixelFormat } from './wasm/scanner_wasm.js';
|
|
2
3
|
import type { AssetOptions, Detection, EngineOptions } from './types.js';
|
|
3
4
|
export interface FrameReply {
|
|
@@ -13,8 +14,18 @@ export interface Engine {
|
|
|
13
14
|
/** Frames that can be decoded at the same time (number of workers). */
|
|
14
15
|
readonly concurrency: number;
|
|
15
16
|
configure(options: EngineOptions): Promise<void>;
|
|
16
|
-
/**
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Decode a camera frame. `buffer` is transferred and returned in the reply.
|
|
19
|
+
* `fastPath: false` runs the fallback strategy only, for a frame the
|
|
20
|
+
* native `BarcodeDetector` already searched without finding anything.
|
|
21
|
+
*/
|
|
22
|
+
processFrame(buffer: ArrayBuffer, width: number, height: number, format: PixelFormat, fastPath?: boolean): Promise<FrameReply>;
|
|
23
|
+
/**
|
|
24
|
+
* Record codes read by the native `BarcodeDetector` in a frame: same
|
|
25
|
+
* format filter, multi-frame confirmation and de-duplication as decoded
|
|
26
|
+
* frames. Points are returned as given.
|
|
27
|
+
*/
|
|
28
|
+
commitExternal(codes: Detection[], elapsedMs: number): Promise<FrameOutcome>;
|
|
18
29
|
/** One-shot scan of a still image, running every strategy. */
|
|
19
30
|
scanImage(buffer: ArrayBuffer, width: number, height: number, format: PixelFormat, options: EngineOptions): Promise<Detection[]>;
|
|
20
31
|
reset(): Promise<void>;
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAA0B,MAAM,WAAW,CAAC;AAEtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD;;;;OAIG;IACH,YAAY,CACV,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,UAAU,CAAC,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7E,8DAA8D;IAC9D,SAAS,CACP,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAgMD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAM3G;AAoED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B9E;AAID,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAMpE"}
|
package/dist/engine.js
CHANGED
|
@@ -133,11 +133,11 @@ class WorkerPoolEngine {
|
|
|
133
133
|
this.configured = true;
|
|
134
134
|
await Promise.all(this.workers.map((w) => w.configure(options)));
|
|
135
135
|
}
|
|
136
|
-
async processFrame(buffer, width, height, format) {
|
|
136
|
+
async processFrame(buffer, width, height, format, fastPath = true) {
|
|
137
137
|
if (!this.configured)
|
|
138
138
|
throw new Error('Engine not configured');
|
|
139
139
|
const generation = this.generation;
|
|
140
|
-
const plan = this.session.plan();
|
|
140
|
+
const plan = this.session.plan(fastPath);
|
|
141
141
|
let res;
|
|
142
142
|
try {
|
|
143
143
|
res = await this.idleWorker().ok({ type: 'decode', buffer, width, height, format, plan }, [buffer]);
|
|
@@ -153,6 +153,11 @@ class WorkerPoolEngine {
|
|
|
153
153
|
}
|
|
154
154
|
return { ...this.session.commit(res.report), buffer: returned };
|
|
155
155
|
}
|
|
156
|
+
async commitExternal(codes, elapsedMs) {
|
|
157
|
+
if (!this.configured)
|
|
158
|
+
throw new Error('Engine not configured');
|
|
159
|
+
return this.session.commitExternal(codes, elapsedMs);
|
|
160
|
+
}
|
|
156
161
|
async scanImage(buffer, width, height, format, options) {
|
|
157
162
|
const res = await this.idleWorker().ok({ type: 'scan', buffer, width, height, format, options }, [
|
|
158
163
|
buffer,
|
|
@@ -203,10 +208,25 @@ class InlineEngine {
|
|
|
203
208
|
this.decoder = new DecoderCore();
|
|
204
209
|
}
|
|
205
210
|
async configure(options) {
|
|
211
|
+
// Same configuration for both: a plan is an index in the decoder's list
|
|
212
|
+
// of fallback strategies (as with workers).
|
|
206
213
|
this.session.configure(options);
|
|
214
|
+
this.decoder.configure(options);
|
|
215
|
+
}
|
|
216
|
+
async processFrame(buffer, width, height, format, fastPath = true) {
|
|
217
|
+
const plan = this.session.plan(fastPath);
|
|
218
|
+
let report;
|
|
219
|
+
try {
|
|
220
|
+
report = this.decoder.decode(new Uint8Array(buffer), width, height, format, plan);
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
this.session.commit(emptyReport(plan));
|
|
224
|
+
throw err;
|
|
225
|
+
}
|
|
226
|
+
return { ...this.session.commit(report), buffer };
|
|
207
227
|
}
|
|
208
|
-
async
|
|
209
|
-
return
|
|
228
|
+
async commitExternal(codes, elapsedMs) {
|
|
229
|
+
return this.session.commitExternal(codes, elapsedMs);
|
|
210
230
|
}
|
|
211
231
|
async scanImage(buffer, width, height, format, options) {
|
|
212
232
|
return this.decoder.scan(new Uint8Array(buffer), width, height, format, options);
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,8EAA8E;AAC9E,yEAAyE;AACzE,sEAAsE;AACtE,6EAA6E;AAC7E,4EAA4E;AAC5E,cAAc;AACd,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/native.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Rect } from './grabber.js';
|
|
2
|
+
import type { BarcodeFormat, Detection, Point } from './types.js';
|
|
3
|
+
/** A code found by `BarcodeDetector.detect()`. */
|
|
4
|
+
export interface NativeBarcode {
|
|
5
|
+
rawValue: string;
|
|
6
|
+
format: string;
|
|
7
|
+
/** Corners in pixels of the source (for a `<video>`: `videoWidth` space). */
|
|
8
|
+
cornerPoints: readonly Point[];
|
|
9
|
+
}
|
|
10
|
+
interface BarcodeDetectorInstance {
|
|
11
|
+
detect(source: CanvasImageSource): Promise<NativeBarcode[]>;
|
|
12
|
+
}
|
|
13
|
+
/** The `BarcodeDetector` constructor. */
|
|
14
|
+
export interface BarcodeDetectorClass {
|
|
15
|
+
new (options?: {
|
|
16
|
+
formats?: string[];
|
|
17
|
+
}): BarcodeDetectorInstance;
|
|
18
|
+
getSupportedFormats(): Promise<string[]>;
|
|
19
|
+
}
|
|
20
|
+
/** Native decoder serving one reader configuration. */
|
|
21
|
+
export declare class NativeDetector {
|
|
22
|
+
private detector;
|
|
23
|
+
/** Formats the detector looks for. */
|
|
24
|
+
readonly formats: readonly BarcodeFormat[];
|
|
25
|
+
private constructor();
|
|
26
|
+
/**
|
|
27
|
+
* A detector for `formats` (default: all), or `undefined` when the native
|
|
28
|
+
* decoder cannot replace the engine's fast path: API absent, or one of the
|
|
29
|
+
* requested formats not supported natively (codes of that format would
|
|
30
|
+
* then only be read by the slower fallbacks).
|
|
31
|
+
*/
|
|
32
|
+
static create(formats: readonly BarcodeFormat[] | undefined, api?: BarcodeDetectorClass | undefined): Promise<NativeDetector | undefined>;
|
|
33
|
+
/**
|
|
34
|
+
* Codes in `source` whose center lies in `rect` (the region of interest, in
|
|
35
|
+
* source pixels), as detections in source pixels. Throws when the native
|
|
36
|
+
* decoder fails.
|
|
37
|
+
*/
|
|
38
|
+
detect(source: CanvasImageSource, rect: Rect): Promise<Detection[]>;
|
|
39
|
+
}
|
|
40
|
+
/** `true` for a function implemented by the browser, not in JavaScript. */
|
|
41
|
+
export declare function isBuiltIn(fn: object): boolean;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIlE,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,YAAY,EAAE,SAAS,KAAK,EAAE,CAAC;CAChC;AAED,UAAU,uBAAuB;IAC/B,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CAC7D;AAED,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,KAAK,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,uBAAuB,CAAC;IAChE,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC1C;AAwBD,uDAAuD;AACvD,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ;IAChB,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE;IAH5C,OAAO;IAMP;;;;;OAKG;WACU,MAAM,CACjB,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,EAC7C,GAAG,GAAE,oBAAoB,GAAG,SAAuB,GAClD,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAoBtC;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAW1E;AAiBD,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7C"}
|
package/dist/native.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formats of this SDK, all spelled like the native ones (`qr_code`, `ean_13`…)
|
|
3
|
+
* except `micro_qr`, which the native API does not have: when it is asked
|
|
4
|
+
* for, it is still read by the engine's fallback strategies (`Hard` decodes
|
|
5
|
+
* the raw frame with every format), only less often than by a fast path.
|
|
6
|
+
*/
|
|
7
|
+
const NATIVE_FORMATS = [
|
|
8
|
+
'qr_code',
|
|
9
|
+
'data_matrix',
|
|
10
|
+
'aztec',
|
|
11
|
+
'pdf417',
|
|
12
|
+
'code_128',
|
|
13
|
+
'code_39',
|
|
14
|
+
'code_93',
|
|
15
|
+
'ean_13',
|
|
16
|
+
'ean_8',
|
|
17
|
+
'upc_a',
|
|
18
|
+
'upc_e',
|
|
19
|
+
'itf',
|
|
20
|
+
'codabar',
|
|
21
|
+
];
|
|
22
|
+
/** Native decoder serving one reader configuration. */
|
|
23
|
+
export class NativeDetector {
|
|
24
|
+
constructor(detector,
|
|
25
|
+
/** Formats the detector looks for. */
|
|
26
|
+
formats) {
|
|
27
|
+
this.detector = detector;
|
|
28
|
+
this.formats = formats;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A detector for `formats` (default: all), or `undefined` when the native
|
|
32
|
+
* decoder cannot replace the engine's fast path: API absent, or one of the
|
|
33
|
+
* requested formats not supported natively (codes of that format would
|
|
34
|
+
* then only be read by the slower fallbacks).
|
|
35
|
+
*/
|
|
36
|
+
static async create(formats, api = nativeApi()) {
|
|
37
|
+
if (!api)
|
|
38
|
+
return undefined;
|
|
39
|
+
let supported;
|
|
40
|
+
try {
|
|
41
|
+
supported = await api.getSupportedFormats();
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
// On Android the list is empty until Google Play Services has downloaded
|
|
47
|
+
// its barcode module (first use on the device, in the background): the
|
|
48
|
+
// detector is unavailable *for now*, the engine does the whole job.
|
|
49
|
+
const wanted = (formats?.length ? formats : NATIVE_FORMATS).filter((f) => f !== 'micro_qr');
|
|
50
|
+
if (wanted.length === 0 || !wanted.every((f) => supported.includes(f)))
|
|
51
|
+
return undefined;
|
|
52
|
+
try {
|
|
53
|
+
return new NativeDetector(new api({ formats: [...wanted] }), wanted);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Codes in `source` whose center lies in `rect` (the region of interest, in
|
|
61
|
+
* source pixels), as detections in source pixels. Throws when the native
|
|
62
|
+
* decoder fails.
|
|
63
|
+
*/
|
|
64
|
+
async detect(source, rect) {
|
|
65
|
+
const found = await this.detector.detect(source);
|
|
66
|
+
const timestamp = Date.now();
|
|
67
|
+
return found.flatMap((code) => {
|
|
68
|
+
const format = code.format;
|
|
69
|
+
if (!this.formats.includes(format) || code.cornerPoints.length === 0)
|
|
70
|
+
return [];
|
|
71
|
+
if (!contains(rect, center(code.cornerPoints)))
|
|
72
|
+
return [];
|
|
73
|
+
const points = code.cornerPoints.map((p) => ({ x: p.x, y: p.y }));
|
|
74
|
+
return [{ text: code.rawValue, format, points, timestamp }];
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The browser's own `BarcodeDetector`, if any. Feature detection only (no
|
|
80
|
+
* list of browsers or devices): any browser that ships the API is used.
|
|
81
|
+
*
|
|
82
|
+
* Polyfills are rejected: packages such as `barcode-detector` install a
|
|
83
|
+
* `BarcodeDetector` that runs ZXing in WebAssembly on the main thread,
|
|
84
|
+
* slower than this SDK's own engine in its workers. A built-in class
|
|
85
|
+
* stringifies as `function BarcodeDetector() { [native code] }`.
|
|
86
|
+
*/
|
|
87
|
+
function nativeApi() {
|
|
88
|
+
const api = Reflect.get(globalThis, 'BarcodeDetector');
|
|
89
|
+
if (typeof api !== 'function' || !isBuiltIn(api))
|
|
90
|
+
return undefined;
|
|
91
|
+
return api;
|
|
92
|
+
}
|
|
93
|
+
/** `true` for a function implemented by the browser, not in JavaScript. */
|
|
94
|
+
export function isBuiltIn(fn) {
|
|
95
|
+
return /\{\s*\[native code\]\s*\}\s*$/.test(Function.prototype.toString.call(fn));
|
|
96
|
+
}
|
|
97
|
+
function center(points) {
|
|
98
|
+
const n = points.length;
|
|
99
|
+
return {
|
|
100
|
+
x: points.reduce((s, p) => s + p.x, 0) / n,
|
|
101
|
+
y: points.reduce((s, p) => s + p.y, 0) / n,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function contains(r, p) {
|
|
105
|
+
return p.x >= r.x && p.x <= r.x + r.width && p.y >= r.y && p.y <= r.y + r.height;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
|
package/dist/reader.d.ts
CHANGED
|
@@ -21,8 +21,20 @@ export declare class BarcodeReader {
|
|
|
21
21
|
private engineOptions;
|
|
22
22
|
private running;
|
|
23
23
|
private paused;
|
|
24
|
-
/** A grab (GPU readback)
|
|
24
|
+
/** A frame is being acquired: grab (GPU readback) and native detection. */
|
|
25
25
|
private grabbing;
|
|
26
|
+
/** Native `BarcodeDetector` used as the fast path, when enabled and available. */
|
|
27
|
+
private native;
|
|
28
|
+
/** Bumped when the native detector is replaced: results of the old one are dropped. */
|
|
29
|
+
private nativeGeneration;
|
|
30
|
+
/** The native detector failed once: not used again by this reader. */
|
|
31
|
+
private nativeFailed;
|
|
32
|
+
/** Native detector active: a fallback-only frame is being grabbed or decoded. */
|
|
33
|
+
private fallbackInFlight;
|
|
34
|
+
/** Native detector active: earliest time of the next fallback-only frame. */
|
|
35
|
+
private nextFallbackAt;
|
|
36
|
+
/** Which decoder drew the current highlights: each one only clears its own. */
|
|
37
|
+
private highlightSource;
|
|
26
38
|
/** Frames being decoded (at most `engine.concurrency`). */
|
|
27
39
|
private decoding;
|
|
28
40
|
/** Sequence number of the last grabbed frame, and of the last one drawn. */
|
|
@@ -102,14 +114,41 @@ export declare class BarcodeReader {
|
|
|
102
114
|
* Back-pressure: at most one grab in flight and one frame waiting for a
|
|
103
115
|
* free worker. While a frame waits, no new grab starts, so frames are
|
|
104
116
|
* skipped, never queued, and the waiting frame is at most one decode old.
|
|
117
|
+
* The native detection is part of the grab stage, so the same rule keeps
|
|
118
|
+
* at most one `detect()` in flight.
|
|
105
119
|
*/
|
|
106
120
|
private tick;
|
|
121
|
+
/**
|
|
122
|
+
* Grab stage. With the native `BarcodeDetector`, the frame is searched
|
|
123
|
+
* natively first, straight from the `<video>` (Chrome reads it outside the
|
|
124
|
+
* page's threads): no grab of our own. Codes it finds are committed right
|
|
125
|
+
* away. When it finds nothing, the engine gets a frame **from time to
|
|
126
|
+
* time** (`FALLBACK_INTERVAL_MS`), without its fast path, for one fallback
|
|
127
|
+
* strategy: the safety net for what the native decoder has no
|
|
128
|
+
* preprocessing for (laser engraving, light-on-dark codes, `micro_qr`…).
|
|
129
|
+
* Grabbing and decoding every frame as well would double the reads of the
|
|
130
|
+
* frame and keep the workers busy on frames the native decoder handles,
|
|
131
|
+
* costing battery and CPU it also needs.
|
|
132
|
+
*/
|
|
133
|
+
private acquire;
|
|
134
|
+
/** The engine may decode a frame for its fallbacks (native detector active). */
|
|
135
|
+
private fallbackDue;
|
|
136
|
+
/** The native decoder threw: decode with the engine only from now on. */
|
|
137
|
+
private disableNative;
|
|
138
|
+
/** The region of interest, in video pixels. */
|
|
139
|
+
private videoRect;
|
|
107
140
|
private grabFrame;
|
|
108
141
|
private enqueue;
|
|
109
142
|
private decode;
|
|
110
143
|
private decodeFrame;
|
|
144
|
+
/** Draw the live codes of frame `seq` and report the new ones, mapped to video pixels by `toVideo`. */
|
|
145
|
+
private present;
|
|
111
146
|
private handleFrameError;
|
|
112
147
|
private takeBuffer;
|
|
148
|
+
/**
|
|
149
|
+
* Account for a processed frame. `counted: false` for a native miss handed
|
|
150
|
+
* to the engine: that frame is counted once, when the engine is done.
|
|
151
|
+
*/
|
|
113
152
|
private updatePerf;
|
|
114
153
|
private track;
|
|
115
154
|
private refreshButtons;
|
package/dist/reader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"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"}
|