@gueshbzh-perso/scanner 0.5.1 → 0.7.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/LICENSE +21 -0
- package/README.md +38 -14
- package/dist/camera.d.ts.map +1 -1
- package/dist/camera.js +5 -2
- package/dist/camera.js.map +1 -1
- package/dist/core.d.ts +28 -10
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +92 -42
- package/dist/core.js.map +1 -1
- package/dist/engine.d.ts +26 -3
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +159 -51
- package/dist/engine.js.map +1 -1
- package/dist/grabber.d.ts +28 -0
- package/dist/grabber.d.ts.map +1 -1
- package/dist/grabber.js +81 -3
- package/dist/grabber.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +12 -11
- package/dist/overlay.js.map +1 -1
- package/dist/protocol.d.ts +9 -13
- package/dist/protocol.d.ts.map +1 -1
- package/dist/reader.d.ts +33 -3
- package/dist/reader.d.ts.map +1 -1
- package/dist/reader.js +113 -25
- package/dist/reader.js.map +1 -1
- package/dist/types.d.ts +11 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/wasm/THIRD_PARTY_LICENSES.md +3879 -0
- package/dist/wasm/scanner_wasm.d.ts +52 -0
- package/dist/wasm/scanner_wasm.js +87 -0
- package/dist/wasm/scanner_wasm_bg.wasm +0 -0
- package/dist/wasm/scanner_wasm_bg.wasm.d.ts +6 -0
- package/dist/worker.js +15 -17
- package/dist/worker.js.map +1 -1
- package/package.json +6 -3
- package/src/camera.ts +107 -0
- package/src/core.ts +189 -0
- package/src/engine.ts +348 -0
- package/src/feedback.ts +50 -0
- package/src/geometry.ts +55 -0
- package/src/grabber.ts +385 -0
- package/src/index.ts +20 -0
- package/src/overlay.ts +225 -0
- package/src/protocol.ts +38 -0
- package/src/reader.ts +474 -0
- package/src/scan-image.ts +88 -0
- package/src/types.ts +155 -0
- package/src/worker.ts +57 -0
- package/dist/wasm/scanner_wasm_simd_bg.wasm +0 -0
package/dist/engine.js
CHANGED
|
@@ -1,12 +1,36 @@
|
|
|
1
|
-
// Decoding engine facade: same API whether decoding runs in
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
// Decoding engine facade: same API whether decoding runs in Web Workers or inline.
|
|
2
|
+
//
|
|
3
|
+
// With workers, frames are decoded **in parallel** by a pool of stateless
|
|
4
|
+
// decoders (one WebAssembly instance per worker), while the scan session
|
|
5
|
+
// (strategy scheduling, multi-frame confirmation, de-duplication) runs on the
|
|
6
|
+
// main thread: its calls take microseconds, and a single instance of the
|
|
7
|
+
// state is what keeps confirmations and de-duplication correct across
|
|
8
|
+
// workers. Decoding is CPU-bound and single-threaded per frame, so on phones
|
|
9
|
+
// with many slow cores (Galaxy A14: decode ~125 ms) the pool multiplies the
|
|
10
|
+
// frame rate.
|
|
11
|
+
import { DecoderCore, SessionCore, compileWasm, defaultWasmUrl, loadWasm } from './core.js';
|
|
12
|
+
/**
|
|
13
|
+
* Default pool size: one worker per core, minus one for the main thread
|
|
14
|
+
* (camera, GPU, UI), capped at 3. Beyond 3 the frame rate is limited by the
|
|
15
|
+
* frame grab (~55 ms on a Galaxy A14, so ~18 fps) and more workers only cost
|
|
16
|
+
* memory (one WebAssembly instance each).
|
|
17
|
+
*/
|
|
18
|
+
export function defaultWorkerCount() {
|
|
19
|
+
const cores = typeof navigator !== 'undefined' ? navigator.hardwareConcurrency || 2 : 2;
|
|
20
|
+
return Math.min(3, Math.max(1, cores - 1));
|
|
21
|
+
}
|
|
22
|
+
/** One decoding worker, restarted if the engine crashes. */
|
|
23
|
+
class DecoderWorker {
|
|
24
|
+
/** `false` once the worker failed for good (script error, crash outside a request). */
|
|
25
|
+
get alive() {
|
|
26
|
+
return this.dead === null;
|
|
27
|
+
}
|
|
28
|
+
constructor(spawn, module) {
|
|
5
29
|
this.spawn = spawn;
|
|
6
|
-
this.
|
|
7
|
-
this.simd = simd;
|
|
8
|
-
this.inWorker = true;
|
|
30
|
+
this.module = module;
|
|
9
31
|
this.version = '';
|
|
32
|
+
/** Requests sent and not answered yet. */
|
|
33
|
+
this.busy = 0;
|
|
10
34
|
this.nextId = 1;
|
|
11
35
|
this.pending = new Map();
|
|
12
36
|
this.dead = null;
|
|
@@ -45,15 +69,21 @@ class WorkerEngine {
|
|
|
45
69
|
}
|
|
46
70
|
/** Send a request; on a fatal engine crash, restart the worker before throwing. */
|
|
47
71
|
async ok(req, transfer) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
72
|
+
this.busy++;
|
|
73
|
+
try {
|
|
74
|
+
if (this.restarting)
|
|
75
|
+
await this.restarting;
|
|
76
|
+
const res = await this.call(req, transfer);
|
|
77
|
+
if (!res.ok) {
|
|
78
|
+
if (res.fatal)
|
|
79
|
+
await this.restart();
|
|
80
|
+
throw Object.assign(new Error(res.error), { buffer: res.buffer });
|
|
81
|
+
}
|
|
82
|
+
return res;
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
this.busy--;
|
|
55
86
|
}
|
|
56
|
-
return res;
|
|
57
87
|
}
|
|
58
88
|
restart() {
|
|
59
89
|
this.restarting ?? (this.restarting = (async () => {
|
|
@@ -62,12 +92,12 @@ class WorkerEngine {
|
|
|
62
92
|
this.attach(this.spawn());
|
|
63
93
|
await this.init();
|
|
64
94
|
if (this.options)
|
|
65
|
-
await this.
|
|
95
|
+
await this.call({ type: 'configure', options: this.options });
|
|
66
96
|
})().finally(() => (this.restarting = null)));
|
|
67
97
|
return this.restarting;
|
|
68
98
|
}
|
|
69
99
|
async init() {
|
|
70
|
-
const res = await this.call({ type: 'init',
|
|
100
|
+
const res = await this.call({ type: 'init', module: this.module });
|
|
71
101
|
if (!res.ok)
|
|
72
102
|
throw new Error(res.error);
|
|
73
103
|
this.version = res.version ?? '';
|
|
@@ -76,82 +106,160 @@ class WorkerEngine {
|
|
|
76
106
|
this.options = options;
|
|
77
107
|
await this.ok({ type: 'configure', options });
|
|
78
108
|
}
|
|
109
|
+
destroy() {
|
|
110
|
+
this.fail(new Error('Engine destroyed'));
|
|
111
|
+
this.worker.terminate();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** A pool of decoding workers serving one scan session on the main thread. */
|
|
115
|
+
class WorkerPoolEngine {
|
|
116
|
+
constructor(workers) {
|
|
117
|
+
this.workers = workers;
|
|
118
|
+
this.inWorker = true;
|
|
119
|
+
this.session = new SessionCore();
|
|
120
|
+
this.configured = false;
|
|
121
|
+
/** Bumped by `configure`: reports planned with an older configuration are dropped. */
|
|
122
|
+
this.generation = 0;
|
|
123
|
+
this.version = workers[0]?.version ?? '';
|
|
124
|
+
}
|
|
125
|
+
get concurrency() {
|
|
126
|
+
return this.workers.length;
|
|
127
|
+
}
|
|
128
|
+
async configure(options) {
|
|
129
|
+
// Session and decoders must share the configuration: a plan is an index
|
|
130
|
+
// in the decoder's list of fallback strategies.
|
|
131
|
+
this.generation++;
|
|
132
|
+
this.session.configure(options);
|
|
133
|
+
this.configured = true;
|
|
134
|
+
await Promise.all(this.workers.map((w) => w.configure(options)));
|
|
135
|
+
}
|
|
79
136
|
async processFrame(buffer, width, height, format) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
137
|
+
if (!this.configured)
|
|
138
|
+
throw new Error('Engine not configured');
|
|
139
|
+
const generation = this.generation;
|
|
140
|
+
const plan = this.session.plan();
|
|
141
|
+
let res;
|
|
142
|
+
try {
|
|
143
|
+
res = await this.idleWorker().ok({ type: 'decode', buffer, width, height, format, plan }, [buffer]);
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
// Every plan must be committed, or the scheduler keeps counting it as in flight.
|
|
147
|
+
this.session.commit(emptyReport(plan));
|
|
148
|
+
throw err;
|
|
149
|
+
}
|
|
150
|
+
const returned = res.buffer ?? new ArrayBuffer(width * height);
|
|
151
|
+
if (generation !== this.generation || !res.report) {
|
|
152
|
+
return { results: null, live: [], decodeMs: 0, buffer: returned };
|
|
153
|
+
}
|
|
154
|
+
return { ...this.session.commit(res.report), buffer: returned };
|
|
87
155
|
}
|
|
88
156
|
async scanImage(buffer, width, height, format, options) {
|
|
89
|
-
const res = await this.ok({ type: 'scan', buffer, width, height, format, options }, [
|
|
90
|
-
|
|
157
|
+
const res = await this.idleWorker().ok({ type: 'scan', buffer, width, height, format, options }, [
|
|
158
|
+
buffer,
|
|
159
|
+
]);
|
|
160
|
+
return res.results ?? [];
|
|
91
161
|
}
|
|
92
162
|
async reset() {
|
|
93
|
-
|
|
163
|
+
this.session.reset();
|
|
94
164
|
}
|
|
95
165
|
async clearCooldown(text) {
|
|
96
|
-
|
|
166
|
+
this.session.clearCooldown(text);
|
|
97
167
|
}
|
|
98
168
|
destroy() {
|
|
99
|
-
|
|
100
|
-
|
|
169
|
+
for (const w of this.workers)
|
|
170
|
+
w.destroy();
|
|
171
|
+
this.session.destroy();
|
|
172
|
+
}
|
|
173
|
+
idleWorker() {
|
|
174
|
+
const worker = pickWorker(this.workers);
|
|
175
|
+
if (!worker)
|
|
176
|
+
throw new Error('Scanner engine unavailable: every decoding worker failed');
|
|
177
|
+
return worker;
|
|
101
178
|
}
|
|
102
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* The live worker with the fewest requests in progress. Dead workers are
|
|
182
|
+
* skipped: they reject instantly, so they always look the least busy and
|
|
183
|
+
* would otherwise receive most frames.
|
|
184
|
+
*/
|
|
185
|
+
export function pickWorker(workers) {
|
|
186
|
+
let best;
|
|
187
|
+
for (const w of workers) {
|
|
188
|
+
if (w.alive && (!best || w.busy < best.busy))
|
|
189
|
+
best = w;
|
|
190
|
+
}
|
|
191
|
+
return best;
|
|
192
|
+
}
|
|
193
|
+
function emptyReport(plan) {
|
|
194
|
+
return { plan, results: [], fallbackRan: false, fallbackRead: false, elapsedMs: 0 };
|
|
195
|
+
}
|
|
196
|
+
/** Everything on the main thread (no Worker support). */
|
|
103
197
|
class InlineEngine {
|
|
104
|
-
constructor(
|
|
105
|
-
this.
|
|
106
|
-
this.simd = simd;
|
|
198
|
+
constructor(version) {
|
|
199
|
+
this.version = version;
|
|
107
200
|
this.inWorker = false;
|
|
108
|
-
this.
|
|
201
|
+
this.concurrency = 1;
|
|
202
|
+
this.session = new SessionCore();
|
|
203
|
+
this.decoder = new DecoderCore();
|
|
109
204
|
}
|
|
110
205
|
async configure(options) {
|
|
111
|
-
this.
|
|
206
|
+
this.session.configure(options);
|
|
112
207
|
}
|
|
113
208
|
async processFrame(buffer, width, height, format) {
|
|
114
|
-
return { ...this.
|
|
209
|
+
return { ...this.session.process(new Uint8Array(buffer), width, height, format), buffer };
|
|
115
210
|
}
|
|
116
211
|
async scanImage(buffer, width, height, format, options) {
|
|
117
|
-
return this.
|
|
212
|
+
return this.decoder.scan(new Uint8Array(buffer), width, height, format, options);
|
|
118
213
|
}
|
|
119
214
|
async reset() {
|
|
120
|
-
this.
|
|
215
|
+
this.session.reset();
|
|
121
216
|
}
|
|
122
217
|
async clearCooldown(text) {
|
|
123
|
-
this.
|
|
218
|
+
this.session.clearCooldown(text);
|
|
124
219
|
}
|
|
125
220
|
destroy() {
|
|
126
|
-
this.
|
|
221
|
+
this.session.destroy();
|
|
222
|
+
this.decoder.destroy();
|
|
127
223
|
}
|
|
128
224
|
}
|
|
129
|
-
/**
|
|
225
|
+
/**
|
|
226
|
+
* Load the engine: a pool of Web Workers when possible, else the main thread.
|
|
227
|
+
*
|
|
228
|
+
* Low-level API, for custom pipelines (frames you already have as pixels).
|
|
229
|
+
* Most applications should use `BarcodeReader` or `scanImage`. The `Engine`
|
|
230
|
+
* interface may gain members in minor versions.
|
|
231
|
+
*/
|
|
130
232
|
export async function createEngine(options = {}) {
|
|
131
|
-
const
|
|
132
|
-
|
|
233
|
+
const wasmUrl = new URL(String(options.wasmUrl ?? defaultWasmUrl()), location.href).href;
|
|
234
|
+
// Compiled once here: the main thread needs the engine for the session,
|
|
235
|
+
// and the workers instantiate the same module without compiling it again.
|
|
236
|
+
const module = await compileWasm(wasmUrl);
|
|
237
|
+
const version = await loadWasm(module);
|
|
133
238
|
if (options.worker !== false && typeof Worker !== 'undefined') {
|
|
134
239
|
const workerUrl = options.workerUrl;
|
|
135
240
|
const spawn = () => workerUrl
|
|
136
241
|
? new Worker(workerUrl, { type: 'module' })
|
|
137
242
|
: new Worker(new URL('./worker.js', import.meta.url), { type: 'module' });
|
|
138
|
-
|
|
243
|
+
const count = Math.max(1, Math.floor(options.workers ?? defaultWorkerCount()));
|
|
244
|
+
const workers = [];
|
|
139
245
|
try {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
246
|
+
for (let i = 0; i < count; i++)
|
|
247
|
+
workers.push(new DecoderWorker(spawn, module));
|
|
248
|
+
await Promise.all(workers.map((w) => w.init()));
|
|
249
|
+
return new WorkerPoolEngine(workers);
|
|
143
250
|
}
|
|
144
251
|
catch (err) {
|
|
145
|
-
|
|
252
|
+
for (const w of workers)
|
|
253
|
+
w.destroy();
|
|
146
254
|
console.warn('[scanner] Web Worker unavailable, decoding on the main thread:', err);
|
|
147
255
|
}
|
|
148
256
|
}
|
|
149
|
-
return new InlineEngine(
|
|
257
|
+
return new InlineEngine(version);
|
|
150
258
|
}
|
|
151
259
|
let shared = null;
|
|
152
|
-
/** Engine shared by `scanImage` calls. */
|
|
260
|
+
/** Engine shared by `scanImage` calls (one worker is enough for still images). */
|
|
153
261
|
export function sharedEngine(options) {
|
|
154
|
-
shared ?? (shared = createEngine(options).catch((err) => {
|
|
262
|
+
shared ?? (shared = createEngine({ ...options, workers: 1 }).catch((err) => {
|
|
155
263
|
shared = null;
|
|
156
264
|
throw err;
|
|
157
265
|
}));
|
package/dist/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/grabber.d.ts
CHANGED
|
@@ -40,6 +40,34 @@ export declare class CanvasGrabber implements FrameGrabber {
|
|
|
40
40
|
destroy(): void;
|
|
41
41
|
}
|
|
42
42
|
export declare function createGrabber(backend?: 'auto' | 'webgl' | 'canvas'): FrameGrabber;
|
|
43
|
+
/**
|
|
44
|
+
* `'auto'` backend: WebGL2, unless Canvas 2D is measured to be much faster on
|
|
45
|
+
* this device.
|
|
46
|
+
*
|
|
47
|
+
* WebGL does the crop / luma / downscale on the GPU and reads back 4× less
|
|
48
|
+
* data, asynchronously, so it is the right default. But on some GPUs the
|
|
49
|
+
* readback itself is slow (the fence takes tens of ms to signal), and then
|
|
50
|
+
* the grab limits the frame rate now that decoding runs in parallel. So when
|
|
51
|
+
* the median WebGL grab exceeds `SLOW_GRAB_MS`, Canvas 2D is timed on the
|
|
52
|
+
* next `PROBE_FRAMES` frames and kept only if clearly faster (`drawImage` +
|
|
53
|
+
* `getImageData` run on the main thread, while WebGL waits asynchronously).
|
|
54
|
+
* The decision is made once, from measurements: no device list.
|
|
55
|
+
*/
|
|
56
|
+
export declare class AdaptiveGrabber implements FrameGrabber {
|
|
57
|
+
private webgl;
|
|
58
|
+
private makeCanvas;
|
|
59
|
+
private now;
|
|
60
|
+
private active;
|
|
61
|
+
private other;
|
|
62
|
+
private samples;
|
|
63
|
+
private webglMedian;
|
|
64
|
+
private state;
|
|
65
|
+
constructor(webgl: FrameGrabber, makeCanvas: () => FrameGrabber, now?: () => number);
|
|
66
|
+
get kind(): 'webgl' | 'canvas';
|
|
67
|
+
grab(source: TexImageSource, rect: Rect, width: number, height: number, out: Uint8Array): Promise<void>;
|
|
68
|
+
private record;
|
|
69
|
+
destroy(): void;
|
|
70
|
+
}
|
|
43
71
|
/** BT.601 luma with integer arithmetic (same weights as the GPU path and the engine). */
|
|
44
72
|
export declare function rgbaToLuma(rgba: Uint8ClampedArray | Uint8Array, out: Uint8Array): void;
|
|
45
73
|
export declare function sourceSize(source: TexImageSource): [number, number];
|
package/dist/grabber.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grabber.d.ts","sourceRoot":"","sources":["../src/grabber.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IAClC;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxG,OAAO,IAAI,IAAI,CAAC;CACjB;AAuCD,qBAAa,YAAa,YAAW,YAAY;IAC/C,QAAQ,CAAC,IAAI,WAAW;IACxB,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,GAAG,CAAmB;IAC9B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,QAAQ,CAA8D;IAC9E,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,IAAI,CAAS;IAErB,mDAAmD;IACnD,MAAM,CAAC,MAAM,IAAI,YAAY,GAAG,IAAI;IAkBpC,OAAO;IAiCD,IAAI,CACR,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,IAAI,CAAC;IA6ChB,OAAO;CASR;AAED,6EAA6E;AAC7E,qBAAa,aAAc,YAAW,YAAY;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,GAAG,CAA+D;;IAOpE,IAAI,CACR,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,IAAI,CAAC;IAahB,OAAO;CAGR;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAAM,GAAG,OAAO,GAAG,QAAiB,GAAG,YAAY,CAOzF;
|
|
1
|
+
{"version":3,"file":"grabber.d.ts","sourceRoot":"","sources":["../src/grabber.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IAClC;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxG,OAAO,IAAI,IAAI,CAAC;CACjB;AAuCD,qBAAa,YAAa,YAAW,YAAY;IAC/C,QAAQ,CAAC,IAAI,WAAW;IACxB,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,GAAG,CAAmB;IAC9B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,QAAQ,CAA8D;IAC9E,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,IAAI,CAAS;IAErB,mDAAmD;IACnD,MAAM,CAAC,MAAM,IAAI,YAAY,GAAG,IAAI;IAkBpC,OAAO;IAiCD,IAAI,CACR,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,IAAI,CAAC;IA6ChB,OAAO;CASR;AAED,6EAA6E;AAC7E,qBAAa,aAAc,YAAW,YAAY;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,GAAG,CAA+D;;IAOpE,IAAI,CACR,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,IAAI,CAAC;IAahB,OAAO;CAGR;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAAM,GAAG,OAAO,GAAG,QAAiB,GAAG,YAAY,CAOzF;AASD;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAQhD,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,GAAG;IATb,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,KAAK,CAA4C;gBAG/C,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,YAAY,EAC9B,GAAG,GAAE,MAAM,MAAgC;IAKrD,IAAI,IAAI,IAAI,OAAO,GAAG,QAAQ,CAE7B;IAEK,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU;IAO7F,OAAO,CAAC,MAAM;IA2Bd,OAAO,IAAI,IAAI;CAIhB;AAOD,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAMtF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAYnE"}
|
package/dist/grabber.js
CHANGED
|
@@ -168,17 +168,95 @@ export function createGrabber(backend = 'auto') {
|
|
|
168
168
|
if (backend !== 'canvas') {
|
|
169
169
|
const gl = WebGLGrabber.create();
|
|
170
170
|
if (gl)
|
|
171
|
-
return gl;
|
|
171
|
+
return backend === 'auto' ? new AdaptiveGrabber(gl, () => new CanvasGrabber()) : gl;
|
|
172
172
|
if (backend === 'webgl')
|
|
173
173
|
throw new Error('WebGL2 is not available');
|
|
174
174
|
}
|
|
175
175
|
return new CanvasGrabber();
|
|
176
176
|
}
|
|
177
|
+
/** Frames timed per backend before deciding. */
|
|
178
|
+
const PROBE_FRAMES = 15;
|
|
179
|
+
/** WebGL is kept without probing when its median grab is below this (ms). */
|
|
180
|
+
const SLOW_GRAB_MS = 20;
|
|
181
|
+
/** Canvas 2D must be this much faster to be kept: it blocks the main thread. */
|
|
182
|
+
const CANVAS_WIN_RATIO = 0.6;
|
|
183
|
+
/**
|
|
184
|
+
* `'auto'` backend: WebGL2, unless Canvas 2D is measured to be much faster on
|
|
185
|
+
* this device.
|
|
186
|
+
*
|
|
187
|
+
* WebGL does the crop / luma / downscale on the GPU and reads back 4× less
|
|
188
|
+
* data, asynchronously, so it is the right default. But on some GPUs the
|
|
189
|
+
* readback itself is slow (the fence takes tens of ms to signal), and then
|
|
190
|
+
* the grab limits the frame rate now that decoding runs in parallel. So when
|
|
191
|
+
* the median WebGL grab exceeds `SLOW_GRAB_MS`, Canvas 2D is timed on the
|
|
192
|
+
* next `PROBE_FRAMES` frames and kept only if clearly faster (`drawImage` +
|
|
193
|
+
* `getImageData` run on the main thread, while WebGL waits asynchronously).
|
|
194
|
+
* The decision is made once, from measurements: no device list.
|
|
195
|
+
*/
|
|
196
|
+
export class AdaptiveGrabber {
|
|
197
|
+
constructor(webgl, makeCanvas, now = () => performance.now()) {
|
|
198
|
+
this.webgl = webgl;
|
|
199
|
+
this.makeCanvas = makeCanvas;
|
|
200
|
+
this.now = now;
|
|
201
|
+
this.other = null;
|
|
202
|
+
this.samples = [];
|
|
203
|
+
this.webglMedian = 0;
|
|
204
|
+
this.state = 'webgl';
|
|
205
|
+
this.active = webgl;
|
|
206
|
+
}
|
|
207
|
+
get kind() {
|
|
208
|
+
return this.active.kind;
|
|
209
|
+
}
|
|
210
|
+
async grab(source, rect, width, height, out) {
|
|
211
|
+
const grabber = this.active;
|
|
212
|
+
const t0 = this.now();
|
|
213
|
+
await grabber.grab(source, rect, width, height, out);
|
|
214
|
+
if (this.state !== 'decided' && grabber === this.active)
|
|
215
|
+
this.record(this.now() - t0);
|
|
216
|
+
}
|
|
217
|
+
record(ms) {
|
|
218
|
+
this.samples.push(ms);
|
|
219
|
+
if (this.samples.length < PROBE_FRAMES)
|
|
220
|
+
return;
|
|
221
|
+
const median = medianOf(this.samples);
|
|
222
|
+
this.samples = [];
|
|
223
|
+
if (this.state === 'webgl') {
|
|
224
|
+
if (median < SLOW_GRAB_MS) {
|
|
225
|
+
this.state = 'decided';
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
this.webglMedian = median;
|
|
229
|
+
this.other = this.webgl;
|
|
230
|
+
this.active = this.makeCanvas();
|
|
231
|
+
this.state = 'probing';
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
// Probing Canvas 2D: keep it, or go back to WebGL.
|
|
235
|
+
this.state = 'decided';
|
|
236
|
+
if (median < this.webglMedian * CANVAS_WIN_RATIO) {
|
|
237
|
+
this.other?.destroy();
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
this.active.destroy();
|
|
241
|
+
this.active = this.webgl;
|
|
242
|
+
}
|
|
243
|
+
this.other = null;
|
|
244
|
+
}
|
|
245
|
+
destroy() {
|
|
246
|
+
this.active.destroy();
|
|
247
|
+
this.other?.destroy();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function medianOf(values) {
|
|
251
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
252
|
+
return sorted[sorted.length >> 1] ?? 0;
|
|
253
|
+
}
|
|
177
254
|
/** BT.601 luma with integer arithmetic (same weights as the GPU path and the engine). */
|
|
178
255
|
export function rgbaToLuma(rgba, out) {
|
|
179
|
-
const n = out.length;
|
|
256
|
+
const n = Math.min(out.length, rgba.length >> 2);
|
|
180
257
|
for (let i = 0, j = 0; i < n; i++, j += 4) {
|
|
181
|
-
|
|
258
|
+
// In bounds by construction (`n`): `?? 0` only satisfies the type checker.
|
|
259
|
+
out[i] = (19595 * (rgba[j] ?? 0) + 38470 * (rgba[j + 1] ?? 0) + 7471 * (rgba[j + 2] ?? 0)) >> 16;
|
|
182
260
|
}
|
|
183
261
|
}
|
|
184
262
|
export function sourceSize(source) {
|
package/dist/grabber.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grabber.js","sourceRoot":"","sources":["../src/grabber.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"grabber.js","sourceRoot":"","sources":["../src/grabber.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export { BarcodeReader } from './reader.js';
|
|
2
2
|
export { scanImage, type ImageInput, type ScanImageOptions } from './scan-image.js';
|
|
3
3
|
export { createEngine, type Engine, type FrameReply } from './engine.js';
|
|
4
|
-
export { simdSupported } from './core.js';
|
|
5
4
|
export { listCameras } from './camera.js';
|
|
6
5
|
export type { AssetOptions, BarcodeFormat, CameraOptions, CameraResolution, Detection, EngineOptions, FeedbackOptions, OverlayOptions, Point, ProcessingOptions, ReaderEvents, ReaderOptions, ReaderStats, Region, } from './types.js';
|
|
7
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,eAAe,EACf,cAAc,EACd,KAAK,EACL,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,MAAM,GACP,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAA0C,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAgC,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAA0C,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAgC,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/overlay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAShE,qBAAa,OAAO;IAgBhB,OAAO,CAAC,IAAI;IAfd,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,GAAG,CAAkC;IAC7C,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,UAAU,CAAgE;IAClF,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,IAAI,CAAkC;IAC9C,OAAO,CAAC,mBAAmB,CAAuB;gBAGxC,IAAI,EAAE,WAAW,EACzB,OAAO,EAAE,cAAc,GAAG,KAAK,GAAG,SAAS;IA8C7C,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,mDAAmD;IACnD,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI;IAOxC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAOxE,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAK5D,iEAAiE;IACjE,MAAM,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAShE,qBAAa,OAAO;IAgBhB,OAAO,CAAC,IAAI;IAfd,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,GAAG,CAAkC;IAC7C,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,UAAU,CAAgE;IAClF,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,IAAI,CAAkC;IAC9C,OAAO,CAAC,mBAAmB,CAAuB;gBAGxC,IAAI,EAAE,WAAW,EACzB,OAAO,EAAE,cAAc,GAAG,KAAK,GAAG,SAAS;IA8C7C,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B,mDAAmD;IACnD,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI;IAOxC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAOxE,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAK5D,iEAAiE;IACjE,MAAM,IAAI,IAAI;IA+Dd,OAAO,IAAI,IAAI;CAMhB"}
|
package/dist/overlay.js
CHANGED
|
@@ -112,12 +112,13 @@ export class Preview {
|
|
|
112
112
|
ctx.lineWidth = 3;
|
|
113
113
|
ctx.lineCap = 'round';
|
|
114
114
|
ctx.beginPath();
|
|
115
|
-
|
|
115
|
+
const corners = [
|
|
116
116
|
[rx, ry, 1, 1],
|
|
117
117
|
[rx + rw, ry, -1, 1],
|
|
118
118
|
[rx, ry + rh, 1, -1],
|
|
119
119
|
[rx + rw, ry + rh, -1, -1],
|
|
120
|
-
]
|
|
120
|
+
];
|
|
121
|
+
for (const [x, y, dx, dy] of corners) {
|
|
121
122
|
ctx.moveTo(x + dx * c, y);
|
|
122
123
|
ctx.lineTo(x, y);
|
|
123
124
|
ctx.lineTo(x, y + dy * c);
|
|
@@ -144,22 +145,22 @@ export class Preview {
|
|
|
144
145
|
}
|
|
145
146
|
}
|
|
146
147
|
function drawPolygon(ctx, pts) {
|
|
147
|
-
|
|
148
|
+
const [first, second] = pts;
|
|
149
|
+
if (!first)
|
|
148
150
|
return;
|
|
149
151
|
ctx.beginPath();
|
|
150
|
-
if (pts.length === 2) {
|
|
152
|
+
if (pts.length === 2 && second) {
|
|
151
153
|
// 1D codes report the two ends of the scan line: draw a thick bar.
|
|
152
|
-
const [a, b] = pts;
|
|
153
154
|
ctx.save();
|
|
154
155
|
ctx.lineWidth = 10;
|
|
155
156
|
ctx.globalAlpha *= 0.6;
|
|
156
|
-
ctx.moveTo(
|
|
157
|
-
ctx.lineTo(
|
|
157
|
+
ctx.moveTo(first.x, first.y);
|
|
158
|
+
ctx.lineTo(second.x, second.y);
|
|
158
159
|
ctx.stroke();
|
|
159
160
|
ctx.restore();
|
|
160
161
|
return;
|
|
161
162
|
}
|
|
162
|
-
ctx.moveTo(
|
|
163
|
+
ctx.moveTo(first.x, first.y);
|
|
163
164
|
for (const p of pts.slice(1))
|
|
164
165
|
ctx.lineTo(p.x, p.y);
|
|
165
166
|
ctx.closePath();
|
|
@@ -167,10 +168,10 @@ function drawPolygon(ctx, pts) {
|
|
|
167
168
|
ctx.stroke();
|
|
168
169
|
}
|
|
169
170
|
function withAlpha(color, alpha) {
|
|
170
|
-
const
|
|
171
|
-
if (!
|
|
171
|
+
const hex = /^#([0-9a-f]{6})$/i.exec(color)?.[1];
|
|
172
|
+
if (!hex)
|
|
172
173
|
return color;
|
|
173
|
-
const n = parseInt(
|
|
174
|
+
const n = parseInt(hex, 16);
|
|
174
175
|
return `rgba(${n >> 16},${(n >> 8) & 255},${n & 255},${alpha})`;
|
|
175
176
|
}
|
|
176
177
|
function el(tag, css) {
|