scanic 0.1.5 → 0.1.7

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/dist/scanic.js CHANGED
@@ -2,7 +2,7 @@ const K = {
2
2
  // Contour detection params
3
3
  MIN_CONTOUR_AREA: 1e3,
4
4
  MIN_CONTOUR_POINTS: 10
5
- }, O = 0, z = 1, x = 2, Y = [
5
+ }, O = 0, z = 1, x = 2, U = [
6
6
  { dx: 0, dy: -1 },
7
7
  // 0: Top
8
8
  { dx: 1, dy: -1 },
@@ -21,93 +21,93 @@ const K = {
21
21
  // 7: Top-left
22
22
  ];
23
23
  function V(I, A = {}) {
24
- const g = A.width || Math.sqrt(I.length), C = A.height || I.length / g, E = A.mode !== void 0 ? A.mode : z, B = A.method !== void 0 ? A.method : x, Q = A.minArea || K.MIN_CONTOUR_AREA, i = g + 2, s = C + 2, t = new Int32Array(i * s);
25
- for (let a = 0; a < C; a++)
26
- for (let D = 0; D < g; D++)
27
- I[a * g + D] > 0 && (t[(a + 1) * i + (D + 1)] = 1);
28
- const o = [];
29
- let n = 2;
30
- for (let a = 1; a <= C; a++)
31
- for (let D = 1; D <= g; D++) {
32
- const h = t[a * i + D], y = t[a * i + (D - 1)];
33
- let c = null, r = !1, w = -1;
34
- if (h === 1 && y === 0 ? (r = !0, c = { x: D, y: a }, w = 2) : h === 0 && y >= 1 && y !== -1 && y === 1 && (r = !1, c = { x: D - 1, y: a }, w = 6), c) {
35
- if (E === O && !r) {
36
- t[c.y * i + c.x] = -1;
24
+ const g = A.width || Math.sqrt(I.length), C = A.height || I.length / g, E = A.mode !== void 0 ? A.mode : z, B = A.method !== void 0 ? A.method : x, Q = A.minArea || K.MIN_CONTOUR_AREA, i = g + 2, s = C + 2, o = new Int32Array(i * s);
25
+ for (let D = 0; D < C; D++)
26
+ for (let c = 0; c < g; c++)
27
+ I[D * g + c] > 0 && (o[(D + 1) * i + (c + 1)] = 1);
28
+ const t = [];
29
+ let e = 2;
30
+ for (let D = 1; D <= C; D++)
31
+ for (let c = 1; c <= g; c++) {
32
+ const y = o[D * i + c], w = o[D * i + (c - 1)];
33
+ let n = null, h = !1, N = -1;
34
+ if (y === 1 && w === 0 ? (h = !0, n = { x: c, y: D }, N = 2) : y === 0 && w >= 1 && w !== -1 && w === 1 && (h = !1, n = { x: c - 1, y: D }, N = 6), n) {
35
+ if (E === O && !h) {
36
+ o[n.y * i + n.x] = -1;
37
37
  continue;
38
38
  }
39
- const F = n++, R = _(t, i, s, c, w, F);
40
- if (R && R.length > 0) {
41
- let d = R;
42
- B === x && (d = $(R));
43
- const S = d.map((G) => ({ x: G.x - 1, y: G.y - 1 }));
44
- if (S.length >= (B === x ? 4 : K.MIN_CONTOUR_POINTS)) {
45
- const G = {
39
+ const F = e++, G = _(o, i, s, n, N, F);
40
+ if (G && G.length > 0) {
41
+ let S = G;
42
+ B === x && (S = $(G));
43
+ const J = S.map((k) => ({ x: k.x - 1, y: k.y - 1 }));
44
+ if (J.length >= (B === x ? 4 : K.MIN_CONTOUR_POINTS)) {
45
+ const k = {
46
46
  id: F,
47
- points: S,
48
- isOuter: r
47
+ points: J,
48
+ isOuter: h
49
49
  // Calculate area and bounding box later if needed for filtering/sorting
50
50
  };
51
- o.push(G);
51
+ t.push(k);
52
52
  }
53
53
  } else
54
- t[c.y * i + c.x] === 1 && (t[c.y * i + c.x] = F);
54
+ o[n.y * i + n.x] === 1 && (o[n.y * i + n.x] = F);
55
55
  }
56
56
  }
57
- o.forEach((a) => {
58
- a.area = AA(a.points), a.boundingBox = IA(a.points);
57
+ t.forEach((D) => {
58
+ D.area = AA(D.points), D.boundingBox = IA(D.points);
59
59
  });
60
- const e = o.filter((a) => a.area >= Q);
61
- return e.sort((a, D) => D.area - a.area), A.debug && (A.debug.labels = t, A.debug.rawContours = o, A.debug.finalContours = e), e;
60
+ const a = t.filter((D) => D.area >= Q);
61
+ return a.sort((D, c) => c.area - D.area), A.debug && (A.debug.labels = o, A.debug.rawContours = t, A.debug.finalContours = a), a;
62
62
  }
63
63
  function _(I, A, g, C, E, B) {
64
64
  const Q = [], i = /* @__PURE__ */ new Set();
65
- let s = { ...C }, t = -1;
65
+ let s = { ...C }, o = -1;
66
66
  I[C.y * A + C.x] = B;
67
- let o = 0;
68
- const n = A * g;
69
- for (; o++ < n; ) {
70
- let e;
71
- if (t === -1) {
72
- let h = !1;
73
- for (let y = 0; y < 8; y++) {
74
- e = (E + y) % 8;
75
- const c = s.x + Y[e].dx, r = s.y + Y[e].dy;
76
- if (c >= 0 && c < A && r >= 0 && r < g && I[r * A + c] > 0) {
77
- h = !0;
67
+ let t = 0;
68
+ const e = A * g;
69
+ for (; t++ < e; ) {
70
+ let a;
71
+ if (o === -1) {
72
+ let y = !1;
73
+ for (let w = 0; w < 8; w++) {
74
+ a = (E + w) % 8;
75
+ const n = s.x + U[a].dx, h = s.y + U[a].dy;
76
+ if (n >= 0 && n < A && h >= 0 && h < g && I[h * A + n] > 0) {
77
+ y = !0;
78
78
  break;
79
79
  }
80
80
  }
81
- if (!h) return null;
81
+ if (!y) return null;
82
82
  } else
83
- e = (t + 2) % 8;
84
- let a = null;
85
- for (let h = 0; h < 8; h++) {
86
- const y = (e + h) % 8, c = s.x + Y[y].dx, r = s.y + Y[y].dy;
87
- if (c >= 0 && c < A && r >= 0 && r < g && I[r * A + c] > 0) {
88
- a = { x: c, y: r }, t = (y + 4) % 8;
83
+ a = (o + 2) % 8;
84
+ let D = null;
85
+ for (let y = 0; y < 8; y++) {
86
+ const w = (a + y) % 8, n = s.x + U[w].dx, h = s.y + U[w].dy;
87
+ if (n >= 0 && n < A && h >= 0 && h < g && I[h * A + n] > 0) {
88
+ D = { x: n, y: h }, o = (w + 4) % 8;
89
89
  break;
90
90
  }
91
91
  }
92
- if (!a) {
92
+ if (!D) {
93
93
  Q.length === 0 && Q.push({ ...s }), console.warn(`Contour tracing stopped unexpectedly at (${s.x - 1}, ${s.y - 1}) for contour ${B}`);
94
94
  break;
95
95
  }
96
- const D = `${s.x},${s.y}`;
97
- if (i.has(D))
96
+ const c = `${s.x},${s.y}`;
97
+ if (i.has(c))
98
98
  return Q;
99
- if (Q.push({ ...s }), i.add(D), I[a.y * A + a.x] === 1 && (I[a.y * A + a.x] = B), s = a, s.x === C.x && s.y === C.y)
99
+ if (Q.push({ ...s }), i.add(c), I[D.y * A + D.x] === 1 && (I[D.y * A + D.x] = B), s = D, s.x === C.x && s.y === C.y)
100
100
  break;
101
101
  }
102
- return o >= n ? (console.warn(`Contour tracing exceeded max steps for contour ${B}`), null) : Q;
102
+ return t >= e ? (console.warn(`Contour tracing exceeded max steps for contour ${B}`), null) : Q;
103
103
  }
104
104
  function $(I) {
105
105
  if (I.length <= 2)
106
106
  return I;
107
107
  const A = [], g = I.length;
108
108
  for (let C = 0; C < g; C++) {
109
- const E = I[(C + g - 1) % g], B = I[C], Q = I[(C + 1) % g], i = B.x - E.x, s = B.y - E.y, t = Q.x - B.x, o = Q.y - B.y;
110
- i * o !== s * t && A.push(B);
109
+ const E = I[(C + g - 1) % g], B = I[C], Q = I[(C + 1) % g], i = B.x - E.x, s = B.y - E.y, o = Q.x - B.x, t = Q.y - B.y;
110
+ i * t !== s * o && A.push(B);
111
111
  }
112
112
  if (A.length === 0 && g > 0) {
113
113
  if (g === 1) return [I[0]];
@@ -142,7 +142,7 @@ function IA(I) {
142
142
  }
143
143
  return { minX: A, minY: g, maxX: C, maxY: E };
144
144
  }
145
- function q(I, A = 1) {
145
+ function u(I, A = 1) {
146
146
  if (I.length <= 2)
147
147
  return I;
148
148
  let g = 0, C = 0;
@@ -152,7 +152,7 @@ function q(I, A = 1) {
152
152
  i > g && (g = i, C = Q);
153
153
  }
154
154
  if (g > A) {
155
- const Q = q(I.slice(0, C + 1), A), i = q(I.slice(C), A);
155
+ const Q = u(I.slice(0, C + 1), A), i = u(I.slice(C), A);
156
156
  return Q.slice(0, -1).concat(i);
157
157
  } else
158
158
  return [E, B];
@@ -166,12 +166,12 @@ function gA(I, A, g) {
166
166
  const Q = ((I.x - A.x) * C + (I.y - A.y) * E) / B;
167
167
  let i, s;
168
168
  Q < 0 ? (i = A.x, s = A.y) : Q > 1 ? (i = g.x, s = g.y) : (i = A.x + Q * C, s = A.y + Q * E);
169
- const t = I.x - i, o = I.y - s;
170
- return Math.sqrt(t * t + o * o);
169
+ const o = I.x - i, t = I.y - s;
170
+ return Math.sqrt(o * o + t * t);
171
171
  }
172
172
  function BA(I, A = 0.02) {
173
173
  const g = QA(I), C = A * g;
174
- return q(I, C);
174
+ return u(I, C);
175
175
  }
176
176
  function QA(I) {
177
177
  let A = 0;
@@ -197,14 +197,14 @@ function EA(I, A = {}) {
197
197
  return console.warn("Contour does not have enough points for corner detection"), null;
198
198
  const g = A.epsilon || 0.02, C = BA(I, g);
199
199
  let E;
200
- return C && C.length === 4 ? E = tA(C) : E = iA(I.points), !E || !E.topLeft || !E.topRight || !E.bottomRight || !E.bottomLeft ? (console.warn("Failed to find all four corners.", E), null) : (console.log("Corner points:", E), E);
200
+ return C && C.length === 4 ? E = oA(C) : E = iA(I.points), !E || !E.topLeft || !E.topRight || !E.bottomRight || !E.bottomLeft ? (console.warn("Failed to find all four corners.", E), null) : (console.log("Corner points:", E), E);
201
201
  }
202
202
  function iA(I) {
203
203
  if (!I || I.length === 0) return null;
204
204
  let A = I[0], g = I[0], C = I[0], E = I[0], B = A.x + A.y, Q = g.x - g.y, i = C.x + C.y, s = E.x - E.y;
205
- for (let t = 1; t < I.length; t++) {
206
- const o = I[t], n = o.x + o.y, e = o.x - o.y;
207
- n < B && (B = n, A = o), n > i && (i = n, C = o), e > Q && (Q = e, g = o), e < s && (s = e, E = o);
205
+ for (let o = 1; o < I.length; o++) {
206
+ const t = I[o], e = t.x + t.y, a = t.x - t.y;
207
+ e < B && (B = e, A = t), e > i && (i = e, C = t), a > Q && (Q = a, g = t), a < s && (s = a, E = t);
208
208
  }
209
209
  return {
210
210
  topLeft: A,
@@ -213,12 +213,12 @@ function iA(I) {
213
213
  bottomLeft: E
214
214
  };
215
215
  }
216
- function tA(I) {
216
+ function oA(I) {
217
217
  if (I.length !== 4)
218
218
  return console.warn(`Expected 4 points, got ${I.length}`), null;
219
219
  const A = CA(I), g = [...I].sort((Q, i) => {
220
- const s = Math.atan2(Q.y - A.y, Q.x - A.x), t = Math.atan2(i.y - A.y, i.x - A.x);
221
- return s - t;
220
+ const s = Math.atan2(Q.y - A.y, Q.x - A.x), o = Math.atan2(i.y - A.y, i.x - A.x);
221
+ return s - o;
222
222
  });
223
223
  let C = 1 / 0, E = 0;
224
224
  for (let Q = 0; Q < 4; Q++) {
@@ -238,58 +238,58 @@ function tA(I) {
238
238
  bottomLeft: B[3]
239
239
  };
240
240
  }
241
- let N, M = null;
242
- function W() {
243
- return (M === null || M.byteLength === 0) && (M = new Uint8Array(N.memory.buffer)), M;
241
+ let r, L = null;
242
+ function T() {
243
+ return (L === null || L.byteLength === 0) && (L = new Uint8Array(r.memory.buffer)), L;
244
244
  }
245
- let k = 0;
246
- function T(I, A) {
245
+ let M = 0;
246
+ function Z(I, A) {
247
247
  const g = A(I.length * 1, 1) >>> 0;
248
- return W().set(I, g / 1), k = I.length, g;
248
+ return T().set(I, g / 1), M = I.length, g;
249
249
  }
250
250
  function b(I, A) {
251
- return I = I >>> 0, W().subarray(I / 1, I / 1 + A);
251
+ return I = I >>> 0, T().subarray(I / 1, I / 1 + A);
252
252
  }
253
253
  function sA(I, A, g, C) {
254
- const E = T(I, N.__wbindgen_malloc), B = k, Q = N.dilate(E, B, A, g, C);
254
+ const E = Z(I, r.__wbindgen_malloc), B = M, Q = r.dilate(E, B, A, g, C);
255
255
  var i = b(Q[0], Q[1]).slice();
256
- return N.__wbindgen_free(Q[0], Q[1] * 1, 1), i;
256
+ return r.__wbindgen_free(Q[0], Q[1] * 1, 1), i;
257
257
  }
258
- let L = null;
259
- function Z() {
260
- return (L === null || L.byteLength === 0) && (L = new Float32Array(N.memory.buffer)), L;
258
+ let Y = null;
259
+ function X() {
260
+ return (Y === null || Y.byteLength === 0) && (Y = new Float32Array(r.memory.buffer)), Y;
261
261
  }
262
- function oA(I, A) {
262
+ function tA(I, A) {
263
263
  const g = A(I.length * 4, 4) >>> 0;
264
- return Z().set(I, g / 4), k = I.length, g;
264
+ return X().set(I, g / 4), M = I.length, g;
265
265
  }
266
- function eA(I, A, g, C, E) {
267
- const B = oA(I, N.__wbindgen_malloc), Q = k, i = N.hysteresis_thresholding(B, Q, A, g, C, E);
266
+ function aA(I, A, g, C, E) {
267
+ const B = tA(I, r.__wbindgen_malloc), Q = M, i = r.hysteresis_thresholding(B, Q, A, g, C, E);
268
268
  var s = b(i[0], i[1]).slice();
269
- return N.__wbindgen_free(i[0], i[1] * 1, 1), s;
269
+ return r.__wbindgen_free(i[0], i[1] * 1, 1), s;
270
270
  }
271
- function aA(I, A, g, C, E) {
272
- const B = T(I, N.__wbindgen_malloc), Q = k, i = N.blur(B, Q, A, g, C, E);
271
+ function DA(I, A, g, C, E) {
272
+ const B = Z(I, r.__wbindgen_malloc), Q = M, i = r.blur(B, Q, A, g, C, E);
273
273
  var s = b(i[0], i[1]).slice();
274
- return N.__wbindgen_free(i[0], i[1] * 1, 1), s;
274
+ return r.__wbindgen_free(i[0], i[1] * 1, 1), s;
275
275
  }
276
- let m = null;
277
- function nA() {
278
- return (m === null || m.byteLength === 0) && (m = new Uint16Array(N.memory.buffer)), m;
276
+ let d = null;
277
+ function eA() {
278
+ return (d === null || d.byteLength === 0) && (d = new Uint16Array(r.memory.buffer)), d;
279
279
  }
280
280
  function p(I, A) {
281
281
  const g = A(I.length * 2, 2) >>> 0;
282
- return nA().set(I, g / 2), k = I.length, g;
282
+ return eA().set(I, g / 2), M = I.length, g;
283
283
  }
284
- function DA(I, A) {
285
- return I = I >>> 0, Z().subarray(I / 4, I / 4 + A);
284
+ function cA(I, A) {
285
+ return I = I >>> 0, X().subarray(I / 4, I / 4 + A);
286
286
  }
287
- function cA(I, A, g, C, E) {
288
- const B = p(I, N.__wbindgen_malloc), Q = k, i = p(A, N.__wbindgen_malloc), s = k, t = N.non_maximum_suppression(B, Q, i, s, g, C, E);
289
- var o = DA(t[0], t[1]).slice();
290
- return N.__wbindgen_free(t[0], t[1] * 4, 4), o;
287
+ function nA(I, A, g, C, E) {
288
+ const B = p(I, r.__wbindgen_malloc), Q = M, i = p(A, r.__wbindgen_malloc), s = M, o = r.non_maximum_suppression(B, Q, i, s, g, C, E);
289
+ var t = cA(o[0], o[1]).slice();
290
+ return r.__wbindgen_free(o[0], o[1] * 4, 4), t;
291
291
  }
292
- async function hA(I, A) {
292
+ async function yA(I, A) {
293
293
  if (typeof Response == "function" && I instanceof Response) {
294
294
  if (typeof WebAssembly.instantiateStreaming == "function")
295
295
  try {
@@ -307,53 +307,53 @@ async function hA(I, A) {
307
307
  return g instanceof WebAssembly.Instance ? { instance: g, module: I } : g;
308
308
  }
309
309
  }
310
- function yA() {
310
+ function wA() {
311
311
  const I = {};
312
312
  return I.wbg = {}, I.wbg.__wbindgen_init_externref_table = function() {
313
- const A = N.__wbindgen_export_0, g = A.grow(4);
313
+ const A = r.__wbindgen_export_0, g = A.grow(4);
314
314
  A.set(0, void 0), A.set(g + 0, void 0), A.set(g + 1, null), A.set(g + 2, !0), A.set(g + 3, !1);
315
315
  }, I;
316
316
  }
317
- function rA(I, A) {
318
- return N = I.exports, P.__wbindgen_wasm_module = A, L = null, m = null, M = null, N.__wbindgen_start(), N;
317
+ function hA(I, A) {
318
+ return r = I.exports, P.__wbindgen_wasm_module = A, Y = null, d = null, L = null, r.__wbindgen_start(), r;
319
319
  }
320
320
  async function P(I) {
321
- if (N !== void 0) return N;
321
+ if (r !== void 0) return r;
322
322
  typeof I < "u" && (Object.getPrototypeOf(I) === Object.prototype ? { module_or_path: I } = I : console.warn("using deprecated parameters for the initialization function; pass a single object instead")), typeof I > "u" && (I = new URL("data:application/wasm;base64,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QQhqIAIQKQALaAIBfwF+IwBBMGsiAyQAIAMgADYCACADIAE2AgQgA0ECNgIMIANBuJbAADYCCCADQgI3AhQgA0KAgICAICIEIANBBGqthDcDKCADIAQgA62ENwMgIAMgA0EgajYCECADQQhqIAIQKQALaAIBfwF+IwBBMGsiAyQAIAMgADYCACADIAE2AgQgA0ECNgIMIANB7JbAADYCCCADQgI3AhQgA0KAgICAICIEIANBBGqthDcDKCADIAQgA62ENwMgIAMgA0EgajYCECADQQhqIAIQKQALZQAjAEEwayIAJABBxJfAAC0AAARAIABBAjYCDCAAQbCSwAA2AgggAEIBNwIUIAAgATYCLCAAIABBLGqtQoCAgIAghDcDICAAIABBIGo2AhAgAEEIakHQksAAECkACyAAQTBqJAALQQEBfyACIAAoAgAgACgCCCIDa0sEQCAAIAMgAhAPIAAoAgghAwsgACgCBCADaiABIAIQCxogACACIANqNgIIQQALTQECf0HFl8AALQAAGiABKAIEIQIgASgCACEDQQhBBBAzIgFFBEBBBEEIED0ACyABIAI2AgQgASADNgIAIABB8JLAADYCBCAAIAE2AgALQQEBfyMAQSBrIgMkACADQQA2AhAgA0EBNgIEIANCBDcCCCADIAE2AhwgAyAANgIYIAMgA0EYajYCACADIAIQKQALrhIBEn8jAEEQayIXJAAgCCEMIwBB0ABrIgskACALQQhqIAAiCCABIhkgAiIRIAMgBiAHEAQgC0EUaiALKAIMIhwgCygCECACIAMQByACIANsIgBBAXQhBgJAAkACQCAAQQBIIAZB/v///wdLckUEQCAGRQ0BQcWXwAAtAAAaQQIhDSAGQQIQMyIBDQILIA0gBhAvAAtBACEGIAtBADYCKCALQoCAgIAgNwIgIAtBADYCNCALQoCAgIAgNwIsQQIhAUEBIRhBAiECDAELIAtBADYCKCALIAE2AiQgCyAANgIgQcWXwAAtAAAaAkACQAJAIAZBAhAzIgIEQEEAIQYgC0EANgI0IAsgAjYCMCALIAA2AiwgAEUEQEEBIRhBACENDAULIABFIRggCygCGCEBIAsoAhwhEiAAIQIDQCAGIBJPDQMgAS8BACENIAsoAigiECALKAIgRgRAIAtBIGoQEgsgCygCJCAQQQF0aiANOwEA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QQRqEBALIAYoAgggEEEDdGoiASACNgIEIAEgDDYCACAGIBBBAWo2AgwMAQsgBCAbX0UNACAMIBJqQQA6AAALIABBBGohACAMQQFqIQEgCyAMSw0ACyAJIBFqIREgByASaiESIgIgGUcNAAsMAQsgA0ECayEAIAdBAWohAiAHQQF0QQFrIQFBACEDA0AgASADaiIPIAIgA2pJDQYgDyATSw0EIAggD0kNAiADIAdqIQMgAEEBayIADQALCyAGKAIMIgJFDQcgB0EBaiEMQQEgB2shESAHQX9zIQ8gB0UNBgNAIAYgAkEBayICNgIMAkAgBigCCCACQQN0aiIAKAIEIAdsIAAoAgBqIgkgD2oiASAITw0AIAEgCmoiAC0AAA0AIABBAjoAACABIAEgB24iAiAHbGshASAGKAIMIgMgBigCBEYEQCAGQQRqEBALIAYoAgggA0EDdGoiACACNgIEIAAgATYCACAGIANBAWoiAjYCDAsCQCAJIAdrIgEgCE8NACABIApqIgAtAAANACAAQQI6AAAgASABIAduIgIgB2xrIQEgBigCDCIDIAYoAgRGBEAgBkEEahAQCyAGKAIIIANBA3RqIgAgAjYCBCAAIAE2AgAgBiADQQFqIgI2AgwLAkAgCSARaiIBIAhPDQAgASAKaiIALQAADQAgAEECOgAAIAEgASAHbiICIAdsayEBIAYoAgwiAyAGKAIERgRAIAZBBGoQEAsgBigCCCADQQN0aiIAIAI2AgQgACABNgIAIAYgA0EBaiICNgIMCwJAIAlBAWsiASAITw0AIAEgCmoiAC0AAA0AIABBAjoAACABIAEgB24iAiAHbGshASAGKAIMIgMgBigCBEYEQCAGQQRqEBALIAYoAgggA0EDdGoiACACNgIEIAAgATYCACAGIANBAWoiAjYCDAsCQCAJQQFqIgEgCE8NACABIApqIgAtAAANACAAQQI6AAAgASABIAduIgIgB2xrIQEgBigCDCIDIAYoAgRGBEAgBkEEahAQCyAGKAIIIANBA3RqIgAgAjYCBCAAIAE2AgAgBiADQQFqIgI2AgwLAkAgCSAWaiIBIAhPDQAgASAKaiIALQAADQAgAEECOgAAIAEgASAHbiICIAdsayEBIAYoAgwiAyAGKAIERgRAIAZBBGoQEAsgBigCCCADQQN0aiIAIAI2AgQgACAB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AAAPAAAAEwAAAExhenkgaW5zdGFuY2UgaGFzIHByZXZpb3VzbHkgYmVlbiBwb2lzb25lZAAAhAcQACoAAAAvdXNyL2xvY2FsL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9vbmNlX2NlbGwtMS4yMS4zL3NyYy9saWIucnMAALgHEABaAAAACAMAABkAAAByZWVudHJhbnQgaW5pdAAAJAgQAA4AAAC4BxAAWgAAAHoCAAANAAAABAAAAAwAAAAEAAAABQAAAAYAAAAHAAAAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuNi9zcmMvZGxtYWxsb2MucnNhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAGQIEAApAAAAqAQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAABkCBAAKQAAAK4EAAANAAAAbWVtb3J5IGFsbG9jYXRpb24gb2YgIGJ5dGVzIGZhaWxlZAAADAkQABUAAAAhCRAADQAAAHN0ZC9zcmMvYWxsb2MucnNACRAAEAAAAGMBAAAJAAAABAAAAAwAAAAEAAAACAAAAAAAAAAIAAAABAAAAAkAAAAAAAAACAAAAAQAAAAKAAAACwAAAAwAAAANAAAADgAAABAAAAAEAAAADwAAABAAAAARAAAAEgAAAGNhcGFjaXR5IG92ZXJmbG93AAAAuAkQABEAAABhbGxvYy9zcmMvcmF3X3ZlYy5yc9QJEAAUAAAAGAAAAAUAAABpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAA+AkQACAAAAAYChAAEgAAADAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5IG91dCBvZiByYW5nZSBmb3Igc2xpY2Ugb2YgbGVuZ3RoIHJhbmdlIGVuZCBpbmRleCAAACYLEAAQAAAABAsQACIAAABzbGljZSBpbmRleCBzdGFydHMgYXQgIGJ1dCBlbmRzIGF0IABICxAAFgAAAF4LEAANAAAAYXR0ZW1wdCB0byBkaXZpZGUgYnkgemVybwAAAHwLEAAZAAAAAAAAPwAAAL8AQcCXwAALAQEAfAlwcm9kdWNlcnMCCGxhbmd1YWdlAQRSdXN0AAxwcm9jZXNzZWQtYnkDBXJ1c3RjHTEuODMuMCAoOTBiMzVhNjIzIDIwMjQtMTEtMjYpBndhbHJ1cwYwLjIzLjMMd2FzbS1iaW5kZ2VuEzAuMi4xMDAgKDI0MDVlYzJiNCkAUg90YXJnZXRfZmVhdHVyZXMFKw9tdXRhYmxlLWdsb2JhbHMrB3NpbWQxMjgrCHNpZ24tZXh0Kw9yZWZlcmVuY2UtdHlwZXMrCm11bHRpdmFsdWU=", import.meta.url));
323
- const A = yA();
323
+ const A = wA();
324
324
  (typeof I == "string" || typeof Request == "function" && I instanceof Request || typeof URL == "function" && I instanceof URL) && (I = fetch(I));
325
- const { instance: g, module: C } = await hA(await I, A);
326
- return rA(g, C);
325
+ const { instance: g, module: C } = await yA(await I, A);
326
+ return hA(g, C);
327
327
  }
328
- const u = P();
329
- function wA(I) {
328
+ const H = P();
329
+ function NA(I) {
330
330
  const { width: A, height: g, data: C } = I, E = new Uint8ClampedArray(A * g);
331
331
  for (let B = 0, Q = 0; B < C.length; B += 4, Q++)
332
332
  E[Q] = C[B] * 54 + C[B + 1] * 183 + C[B + 2] * 19 >> 8;
333
333
  return E;
334
334
  }
335
- function NA(I, A, g, C = 5, E = 0) {
335
+ function rA(I, A, g, C = 5, E = 0) {
336
336
  E === 0 && (E = 0.3 * ((C - 1) * 0.5 - 1) + 0.8);
337
337
  const B = Math.floor(C / 2), Q = FA(C, E), i = new Uint8ClampedArray(A * g), s = new Uint8ClampedArray(A * g);
338
- for (let t = 0; t < g; t++) {
339
- const o = t * A;
340
- for (let n = 0; n < A; n++) {
341
- let e = 0;
342
- for (let a = -B; a <= B; a++) {
343
- const D = Math.min(A - 1, Math.max(0, n + a));
344
- e += I[o + D] * Q[B + a];
338
+ for (let o = 0; o < g; o++) {
339
+ const t = o * A;
340
+ for (let e = 0; e < A; e++) {
341
+ let a = 0;
342
+ for (let D = -B; D <= B; D++) {
343
+ const c = Math.min(A - 1, Math.max(0, e + D));
344
+ a += I[t + c] * Q[B + D];
345
345
  }
346
- i[o + n] = e;
346
+ i[t + e] = a;
347
347
  }
348
348
  }
349
- for (let t = 0; t < A; t++)
350
- for (let o = 0; o < g; o++) {
351
- let n = 0;
352
- for (let e = -B; e <= B; e++) {
353
- const a = Math.min(g - 1, Math.max(0, o + e));
354
- n += i[a * A + t] * Q[B + e];
349
+ for (let o = 0; o < A; o++)
350
+ for (let t = 0; t < g; t++) {
351
+ let e = 0;
352
+ for (let a = -B; a <= B; a++) {
353
+ const D = Math.min(g - 1, Math.max(0, t + a));
354
+ e += i[D * A + o] * Q[B + a];
355
355
  }
356
- s[o * A + t] = Math.round(n);
356
+ s[t * A + o] = Math.round(e);
357
357
  }
358
358
  return s;
359
359
  }
@@ -368,366 +368,161 @@ function FA(I, A) {
368
368
  g[B] /= E;
369
369
  return g;
370
370
  }
371
- function RA(I, A, g) {
371
+ function GA(I, A, g) {
372
372
  const C = new Int16Array(A * g), E = new Int16Array(A * g);
373
373
  for (let B = 1; B < g - 1; B++) {
374
374
  const Q = B * A, i = (B - 1) * A, s = (B + 1) * A;
375
- for (let t = 1; t < A - 1; t++) {
376
- const o = Q + t, n = I[i + t - 1], e = I[i + t], a = I[i + t + 1], D = I[Q + t - 1], h = I[Q + t + 1], y = I[s + t - 1], c = I[s + t], r = I[s + t + 1], w = a - n + 2 * (h - D) + (r - y), F = y + 2 * c + r - (n + 2 * e + a);
377
- C[o] = w, E[o] = F;
375
+ for (let o = 1; o < A - 1; o++) {
376
+ const t = Q + o, e = I[i + o - 1], a = I[i + o], D = I[i + o + 1], c = I[Q + o - 1], y = I[Q + o + 1], w = I[s + o - 1], n = I[s + o], h = I[s + o + 1], N = D - e + 2 * (y - c) + (h - w), F = w + 2 * n + h - (e + 2 * a + D);
377
+ C[t] = N, E[t] = F;
378
378
  }
379
379
  }
380
380
  return { dx: C, dy: E };
381
381
  }
382
- function lA(I, A, g, C, E) {
382
+ function RA(I, A, g, C, E) {
383
383
  const B = new Float32Array(g * C), Q = new Float32Array(g * C);
384
384
  for (let i = 0; i < I.length; i++) {
385
- const s = I[i], t = A[i];
386
- E ? B[i] = Math.sqrt(s * s + t * t) : B[i] = Math.abs(s) + Math.abs(t);
385
+ const s = I[i], o = A[i];
386
+ E ? B[i] = Math.sqrt(s * s + o * o) : B[i] = Math.abs(s) + Math.abs(o);
387
387
  }
388
388
  for (let i = 1; i < C - 1; i++)
389
389
  for (let s = 1; s < g - 1; s++) {
390
- const t = i * g + s, o = B[t];
391
- if (o === 0) {
392
- Q[t] = 0;
390
+ const o = i * g + s, t = B[o];
391
+ if (t === 0) {
392
+ Q[o] = 0;
393
393
  continue;
394
394
  }
395
- const n = I[t], e = A[t];
396
- let a = 0, D = 0;
397
- const h = Math.abs(n), y = Math.abs(e);
398
- if (y > h * 2.4142)
399
- a = B[t - g], D = B[t + g];
400
- else if (h > y * 2.4142)
401
- a = B[t - 1], D = B[t + 1];
395
+ const e = I[o], a = A[o];
396
+ let D = 0, c = 0;
397
+ const y = Math.abs(e), w = Math.abs(a);
398
+ if (w > y * 2.4142)
399
+ D = B[o - g], c = B[o + g];
400
+ else if (y > w * 2.4142)
401
+ D = B[o - 1], c = B[o + 1];
402
402
  else {
403
- const c = (n ^ e) < 0 ? -1 : 1;
404
- e > 0 ? (a = B[(i - 1) * g + (s - c)], D = B[(i + 1) * g + (s + c)]) : (a = B[(i + 1) * g + (s - c)], D = B[(i - 1) * g + (s + c)]), n > 0 && e > 0 || n < 0 && e < 0 ? (a = B[(i - 1) * g + (s + 1)], D = B[(i + 1) * g + (s - 1)]) : (a = B[(i - 1) * g + (s - 1)], D = B[(i + 1) * g + (s + 1)]);
403
+ const n = (e ^ a) < 0 ? -1 : 1;
404
+ a > 0 ? (D = B[(i - 1) * g + (s - n)], c = B[(i + 1) * g + (s + n)]) : (D = B[(i + 1) * g + (s - n)], c = B[(i - 1) * g + (s + n)]), e > 0 && a > 0 || e < 0 && a < 0 ? (D = B[(i - 1) * g + (s + 1)], c = B[(i + 1) * g + (s - 1)]) : (D = B[(i - 1) * g + (s - 1)], c = B[(i + 1) * g + (s + 1)]);
405
405
  }
406
- o >= a && o >= D ? Q[t] = o : Q[t] = 0;
406
+ t >= D && t >= c ? Q[o] = t : Q[o] = 0;
407
407
  }
408
408
  return Q;
409
409
  }
410
- function v(I, A, g, C, E) {
410
+ function W(I, A, g, C, E) {
411
411
  const B = new Uint8Array(A * g), Q = [];
412
- for (let t = 1; t < g - 1; t++)
413
- for (let o = 1; o < A - 1; o++) {
414
- const n = t * A + o, e = I[n];
415
- e >= E ? (B[n] = 2, Q.push({ x: o, y: t })) : e >= C ? B[n] = 0 : B[n] = 1;
412
+ for (let o = 1; o < g - 1; o++)
413
+ for (let t = 1; t < A - 1; t++) {
414
+ const e = o * A + t, a = I[e];
415
+ a >= E ? (B[e] = 2, Q.push({ x: t, y: o })) : a >= C ? B[e] = 0 : B[e] = 1;
416
416
  }
417
- for (let t = 0; t < A; t++)
418
- B[t] = 1, B[(g - 1) * A + t] = 1;
419
- for (let t = 1; t < g - 1; t++)
420
- B[t * A] = 1, B[t * A + A - 1] = 1;
417
+ for (let o = 0; o < A; o++)
418
+ B[o] = 1, B[(g - 1) * A + o] = 1;
419
+ for (let o = 1; o < g - 1; o++)
420
+ B[o * A] = 1, B[o * A + A - 1] = 1;
421
421
  const i = [-1, 0, 1, -1, 1, -1, 0, 1], s = [-1, -1, -1, 0, 0, 1, 1, 1];
422
422
  for (; Q.length > 0; ) {
423
- const { x: t, y: o } = Q.pop();
424
- for (let n = 0; n < 8; n++) {
425
- const e = t + i[n], a = o + s[n], D = a * A + e;
426
- B[D] === 0 && (B[D] = 2, Q.push({ x: e, y: a }));
423
+ const { x: o, y: t } = Q.pop();
424
+ for (let e = 0; e < 8; e++) {
425
+ const a = o + i[e], D = t + s[e], c = D * A + a;
426
+ B[c] === 0 && (B[c] = 2, Q.push({ x: a, y: D }));
427
427
  }
428
428
  }
429
429
  return B;
430
430
  }
431
- function GA(I, A, g, C = 5) {
431
+ function kA(I, A, g, C = 5) {
432
432
  const E = Math.floor(C / 2), B = new Uint8ClampedArray(A * g), Q = new Uint8ClampedArray(A * g);
433
433
  for (let i = 0; i < g; i++) {
434
434
  const s = i * A;
435
- for (let t = 0; t < A; t++) {
436
- let o = 0;
437
- for (let n = -E; n <= E; n++) {
438
- const e = t + n;
439
- if (e >= 0 && e < A) {
440
- const a = I[s + e];
441
- a > o && (o = a);
435
+ for (let o = 0; o < A; o++) {
436
+ let t = 0;
437
+ for (let e = -E; e <= E; e++) {
438
+ const a = o + e;
439
+ if (a >= 0 && a < A) {
440
+ const D = I[s + a];
441
+ D > t && (t = D);
442
442
  }
443
443
  }
444
- B[s + t] = o;
444
+ B[s + o] = t;
445
445
  }
446
446
  }
447
447
  for (let i = 0; i < A; i++)
448
448
  for (let s = 0; s < g; s++) {
449
- let t = 0;
450
- for (let o = -E; o <= E; o++) {
451
- const n = s + o;
452
- if (n >= 0 && n < g) {
453
- const e = B[n * A + i];
454
- e > t && (t = e);
449
+ let o = 0;
450
+ for (let t = -E; t <= E; t++) {
451
+ const e = s + t;
452
+ if (e >= 0 && e < g) {
453
+ const a = B[e * A + i];
454
+ a > o && (o = a);
455
455
  }
456
456
  }
457
- Q[s * A + i] = t;
457
+ Q[s * A + i] = o;
458
458
  }
459
459
  return Q;
460
460
  }
461
- async function SA(I, A = {}) {
461
+ async function JA(I, A = {}) {
462
462
  const g = [], C = performance.now(), { width: E, height: B } = I;
463
463
  let Q = A.lowThreshold !== void 0 ? A.lowThreshold : 75, i = A.highThreshold !== void 0 ? A.highThreshold : 200;
464
- const s = A.kernelSize || 5, t = A.sigma || 0, o = A.L2gradient === void 0 ? !1 : A.L2gradient, n = A.applyDilation !== void 0 ? A.applyDilation : !0, e = A.dilationKernelSize || 5, a = A.useWasmHysteresis !== void 0 ? A.useWasmHysteresis : !1;
464
+ const s = A.kernelSize || 5, o = A.sigma || 0, t = A.L2gradient === void 0 ? !1 : A.L2gradient, e = A.applyDilation !== void 0 ? A.applyDilation : !0, a = A.dilationKernelSize || 5, D = A.useWasmHysteresis !== void 0 ? A.useWasmHysteresis : !1;
465
465
  Q >= i && (console.warn(`Canny Edge Detector: lowThreshold (${Q}) should be lower than highThreshold (${i}). Swapping them.`), [Q, i] = [i, Q]);
466
- let D = performance.now();
467
- const h = wA(I);
468
- let y = performance.now();
469
- g.push({ step: "Grayscale", ms: (y - D).toFixed(2) }), A.debug && (A.debug.grayscale = h);
470
- let c;
471
- D = performance.now();
466
+ let c = performance.now();
467
+ const y = NA(I);
468
+ let w = performance.now();
469
+ g.push({ step: "Grayscale", ms: (w - c).toFixed(2) }), A.debug && (A.debug.grayscale = y);
470
+ let n;
471
+ c = performance.now();
472
472
  try {
473
- await u, c = aA(h, E, B, s, t);
473
+ await H, n = DA(y, E, B, s, o);
474
474
  } catch {
475
- c = NA(h, E, B, s, t);
475
+ n = rA(y, E, B, s, o);
476
476
  }
477
- y = performance.now(), g.push({ step: "Gaussian Blur", ms: (y - D).toFixed(2) }), A.debug && (A.debug.blurred = c), D = performance.now();
478
- let r, w;
477
+ w = performance.now(), g.push({ step: "Gaussian Blur", ms: (w - c).toFixed(2) }), A.debug && (A.debug.blurred = n), c = performance.now();
478
+ let h, N;
479
479
  {
480
- const l = RA(c, E, B);
481
- r = l.dx, w = l.dy;
480
+ const R = GA(n, E, B);
481
+ h = R.dx, N = R.dy;
482
482
  }
483
- y = performance.now(), g.push({ step: "Gradients", ms: (y - D).toFixed(2) }), D = performance.now();
483
+ w = performance.now(), g.push({ step: "Gradients", ms: (w - c).toFixed(2) }), c = performance.now();
484
484
  let F;
485
485
  try {
486
- await u, F = await cA(r, w, E, B, o);
486
+ await H, F = await nA(h, N, E, B, t);
487
487
  } catch {
488
- F = lA(r, w, E, B, o);
488
+ F = RA(h, N, E, B, t);
489
489
  }
490
- y = performance.now(), g.push({ step: "Non-Max Suppression", ms: (y - D).toFixed(2) }), D = performance.now();
491
- const R = o ? Q * Q : Q, d = o ? i * i : i;
492
- let S;
493
- if (a)
490
+ w = performance.now(), g.push({ step: "Non-Max Suppression", ms: (w - c).toFixed(2) }), c = performance.now();
491
+ const G = t ? Q * Q : Q, S = t ? i * i : i;
492
+ let J;
493
+ if (D)
494
494
  try {
495
- await u, S = eA(F, E, B, R, d);
496
- } catch (l) {
497
- console.warn("WASM hysteresis failed, falling back to JS:", l), S = v(F, E, B, R, d);
495
+ await H, J = aA(F, E, B, G, S);
496
+ } catch (R) {
497
+ console.warn("WASM hysteresis failed, falling back to JS:", R), J = W(F, E, B, G, S);
498
498
  }
499
499
  else
500
- S = v(F, E, B, R, d);
501
- y = performance.now(), g.push({ step: "Hysteresis", ms: (y - D).toFixed(2) }), D = performance.now();
502
- const G = new Uint8ClampedArray(E * B);
503
- for (let l = 0; l < S.length; l++)
504
- G[l] = S[l] === 2 ? 255 : 0;
505
- y = performance.now(), g.push({ step: "Binary Image", ms: (y - D).toFixed(2) }), D = performance.now();
506
- let f = G;
507
- if (n)
500
+ J = W(F, E, B, G, S);
501
+ w = performance.now(), g.push({ step: "Hysteresis", ms: (w - c).toFixed(2) }), c = performance.now();
502
+ const k = new Uint8ClampedArray(E * B);
503
+ for (let R = 0; R < J.length; R++)
504
+ k[R] = J[R] === 2 ? 255 : 0;
505
+ w = performance.now(), g.push({ step: "Binary Image", ms: (w - c).toFixed(2) }), c = performance.now();
506
+ let f = k;
507
+ if (e)
508
508
  try {
509
- await u, f = sA(G, E, B, e);
509
+ await H, f = sA(k, E, B, a);
510
510
  } catch {
511
- f = GA(G, E, B, e);
512
- }
513
- if (y = performance.now(), g.push({ step: "Dilation", ms: (y - D).toFixed(2) }), A.debug) {
514
- A.debug.dx = r, A.debug.dy = w;
515
- const l = new Float32Array(E * B);
516
- for (let J = 0; J < r.length; J++) {
517
- const U = r[J], H = w[J];
518
- l[J] = o ? Math.sqrt(U * U + H * H) : Math.abs(U) + Math.abs(H);
519
- }
520
- A.debug.magnitude = l, A.debug.suppressed = F, A.debug.edgeMap = S, A.debug.cannyEdges = G, A.debug.finalEdges = f, A.debug.timings = g;
521
- }
522
- const j = performance.now();
523
- return g.unshift({ step: "Total", ms: (j - C).toFixed(2) }), console.table(g), f;
524
- }
525
- class dA {
526
- constructor(A = {}) {
527
- this.options = {
528
- targetFPS: A.targetFPS || 10,
529
- // Limit FPS for performance
530
- detectionInterval: A.detectionInterval || 150,
531
- // ms between detections
532
- confidenceThreshold: A.confidenceThreshold || 0.7,
533
- stabilizationFrames: A.stabilizationFrames || 3,
534
- maxProcessingDimension: A.maxProcessingDimension || 500,
535
- // Lower for live processing
536
- ...A
537
- }, this.isRunning = !1, this.stream = null, this.video = null, this.canvas = null, this.ctx = null, this.outputCanvas = null, this.outputCtx = null, this.lastDetectionTime = 0, this.frameCount = 0, this.detectionCount = 0, this.lastFPSUpdate = 0, this.currentFPS = 0, this.lastResult = null, this.stableResults = [], this.currentCorners = null, this.onDetection = null, this.onFPSUpdate = null, this.onError = null;
538
- }
539
- /**
540
- * Initialize webcam access and start live scanning
541
- * @param {HTMLElement} outputElement - Canvas element to render results to
542
- * @param {Object} constraints - MediaStream constraints
543
- */
544
- async init(A, g = {}) {
545
- try {
546
- this.outputCanvas = A, this.outputCtx = this.outputCanvas.getContext("2d"), this.video = document.createElement("video"), this.video.style.display = "none", this.video.autoplay = !0, this.video.muted = !0, this.video.playsInline = !0, document.body.appendChild(this.video), this.canvas = document.createElement("canvas"), this.ctx = this.canvas.getContext("2d");
547
- const E = { ...{
548
- video: {
549
- width: { ideal: 1280, max: 1920 },
550
- height: { ideal: 720, max: 1080 },
551
- facingMode: "environment"
552
- // Use back camera on mobile
553
- },
554
- audio: !1
555
- }, ...g };
556
- this.stream = await navigator.mediaDevices.getUserMedia(E), this.video.srcObject = this.stream, await new Promise((B) => {
557
- this.video.addEventListener("loadedmetadata", B, { once: !0 });
558
- }), this.canvas.width = this.video.videoWidth, this.canvas.height = this.video.videoHeight, this.outputCanvas.width = this.video.videoWidth, this.outputCanvas.height = this.video.videoHeight, console.log(`Live scanner initialized: ${this.video.videoWidth}x${this.video.videoHeight}`);
559
- } catch (C) {
560
- throw console.error("Failed to initialize live scanner:", C), this.onError && this.onError(C), C;
561
- }
562
- }
563
- /**
564
- * Start the live scanning loop
565
- */
566
- start() {
567
- if (this.isRunning || !this.video) {
568
- console.warn("Scanner already running or not initialized");
569
- return;
511
+ f = kA(k, E, B, a);
570
512
  }
571
- this.isRunning = !0, this.lastDetectionTime = Date.now(), this.lastFPSUpdate = Date.now(), this.frameCount = 0, this.detectionCount = 0, console.log("Live scanner started"), this.processFrame();
572
- }
573
- /**
574
- * Stop the live scanning
575
- */
576
- stop() {
577
- this.isRunning = !1, this.stream && (this.stream.getTracks().forEach((A) => A.stop()), this.stream = null), this.video && (this.video.remove(), this.video = null), console.log("Live scanner stopped");
578
- }
579
- /**
580
- * Main processing loop - optimized for performance
581
- */
582
- async processFrame() {
583
- if (!this.isRunning) return;
584
- const A = Date.now();
585
- this.frameCount++;
586
- try {
587
- this.outputCtx.drawImage(this.video, 0, 0, this.outputCanvas.width, this.outputCanvas.height);
588
- const g = A - this.lastDetectionTime;
589
- if (g >= this.options.detectionInterval) {
590
- this.lastDetectionTime = A, this.detectionCount++, this.ctx.drawImage(this.video, 0, 0, this.canvas.width, this.canvas.height);
591
- const C = this.ctx.getImageData(0, 0, this.canvas.width, this.canvas.height);
592
- this.detectDocumentAsync(C).catch((E) => {
593
- console.error("Detection error:", E), this.onError && this.onError(E);
594
- });
595
- }
596
- this.currentCorners && this.drawDocumentOverlay(this.currentCorners), A - this.lastFPSUpdate >= 1e3 && (this.currentFPS = Math.round(this.frameCount * 1e3 / (A - this.lastFPSUpdate)), this.frameCount = 0, this.lastFPSUpdate = A, this.onFPSUpdate && this.onFPSUpdate({
597
- renderFPS: this.currentFPS,
598
- detectionFPS: Math.round(this.detectionCount * 1e3 / 1e3),
599
- lastDetectionTime: g
600
- }), this.detectionCount = 0);
601
- } catch (g) {
602
- console.error("Frame processing error:", g), this.onError && this.onError(g);
603
- }
604
- requestAnimationFrame(() => this.processFrame());
605
- }
606
- /**
607
- * Run document detection asynchronously
608
- */
609
- async detectDocumentAsync(A) {
610
- try {
611
- const g = await X(A, {
612
- ...this.options,
613
- mode: "detect",
614
- // Only detect, no image processing
615
- debug: !1
616
- // Disable debug for performance
617
- });
618
- g.success && g.corners ? (this.updateStableCorners(g.corners), this.onDetection && this.onDetection({
619
- corners: g.corners,
620
- confidence: this.calculateConfidence(g),
621
- isStable: this.stableResults.length >= this.options.stabilizationFrames
622
- })) : this.stableResults.length > 0 && (this.stableResults.pop(), this.stableResults.length === 0 && (this.currentCorners = null));
623
- } catch (g) {
624
- throw console.error("Document detection failed:", g), g;
513
+ if (w = performance.now(), g.push({ step: "Dilation", ms: (w - c).toFixed(2) }), A.debug) {
514
+ A.debug.dx = h, A.debug.dy = N;
515
+ const R = new Float32Array(E * B);
516
+ for (let l = 0; l < h.length; l++) {
517
+ const m = h[l], q = N[l];
518
+ R[l] = t ? Math.sqrt(m * m + q * q) : Math.abs(m) + Math.abs(q);
625
519
  }
520
+ A.debug.magnitude = R, A.debug.suppressed = F, A.debug.edgeMap = J, A.debug.cannyEdges = k, A.debug.finalEdges = f, A.debug.timings = g;
626
521
  }
627
- /**
628
- * Update stable corner detection with smoothing
629
- */
630
- updateStableCorners(A) {
631
- this.stableResults.push(A), this.stableResults.length > this.options.stabilizationFrames && this.stableResults.shift(), this.stableResults.length >= this.options.stabilizationFrames && (this.currentCorners = this.averageCorners(this.stableResults));
632
- }
633
- /**
634
- * Calculate average corners from multiple detections for smoothing
635
- */
636
- averageCorners(A) {
637
- const g = {
638
- topLeft: { x: 0, y: 0 },
639
- topRight: { x: 0, y: 0 },
640
- bottomRight: { x: 0, y: 0 },
641
- bottomLeft: { x: 0, y: 0 }
642
- };
643
- A.forEach((E) => {
644
- Object.keys(g).forEach((B) => {
645
- g[B].x += E[B].x, g[B].y += E[B].y;
646
- });
647
- });
648
- const C = A.length;
649
- return Object.keys(g).forEach((E) => {
650
- g[E].x = Math.round(g[E].x / C), g[E].y = Math.round(g[E].y / C);
651
- }), g;
652
- }
653
- /**
654
- * Draw document overlay on output canvas
655
- */
656
- drawDocumentOverlay(A, g = null, C = 1, E = 1) {
657
- const B = g || this.outputCtx;
658
- B.save();
659
- const Q = {
660
- topLeft: { x: A.topLeft.x * C, y: A.topLeft.y * E },
661
- topRight: { x: A.topRight.x * C, y: A.topRight.y * E },
662
- bottomRight: { x: A.bottomRight.x * C, y: A.bottomRight.y * E },
663
- bottomLeft: { x: A.bottomLeft.x * C, y: A.bottomLeft.y * E }
664
- };
665
- B.strokeStyle = "#00FF00", B.lineWidth = 3, B.setLineDash([5, 5]), B.beginPath(), B.moveTo(Q.topLeft.x, Q.topLeft.y), B.lineTo(Q.topRight.x, Q.topRight.y), B.lineTo(Q.bottomRight.x, Q.bottomRight.y), B.lineTo(Q.bottomLeft.x, Q.bottomLeft.y), B.closePath(), B.stroke(), B.fillStyle = "#00FF00", B.setLineDash([]);
666
- const i = 8 * Math.max(C, E);
667
- Object.values(Q).forEach((s) => {
668
- B.beginPath(), B.arc(s.x, s.y, i, 0, 2 * Math.PI), B.fill();
669
- }), B.restore();
670
- }
671
- /**
672
- * Calculate detection confidence (placeholder - can be enhanced)
673
- */
674
- calculateConfidence(A) {
675
- return 0.8;
676
- }
677
- /**
678
- * Capture current frame as document with perspective transform
679
- */
680
- async captureDocument() {
681
- if (!this.currentCorners || !this.video)
682
- throw new Error("No stable document detected");
683
- const { extractDocument: A } = await Promise.resolve().then(() => uA), g = document.createElement("canvas");
684
- g.width = this.video.videoWidth, g.height = this.video.videoHeight, g.getContext("2d").drawImage(this.video, 0, 0);
685
- const E = this.video.videoWidth / this.outputCanvas.width, B = this.video.videoHeight / this.outputCanvas.height, Q = {
686
- topLeft: {
687
- x: this.currentCorners.topLeft.x * E,
688
- y: this.currentCorners.topLeft.y * B
689
- },
690
- topRight: {
691
- x: this.currentCorners.topRight.x * E,
692
- y: this.currentCorners.topRight.y * B
693
- },
694
- bottomRight: {
695
- x: this.currentCorners.bottomRight.x * E,
696
- y: this.currentCorners.bottomRight.y * B
697
- },
698
- bottomLeft: {
699
- x: this.currentCorners.bottomLeft.x * E,
700
- y: this.currentCorners.bottomLeft.y * B
701
- }
702
- };
703
- return A(g, Q);
704
- }
705
- /**
706
- * Get current scanner statistics
707
- */
708
- getStats() {
709
- return {
710
- isRunning: this.isRunning,
711
- currentFPS: this.currentFPS,
712
- videoResolution: this.video ? `${this.video.videoWidth}x${this.video.videoHeight}` : null,
713
- hasStableDetection: this.currentCorners !== null,
714
- stabilizationProgress: `${this.stableResults.length}/${this.options.stabilizationFrames}`
715
- };
716
- }
522
+ const v = performance.now();
523
+ return g.unshift({ step: "Total", ms: (v - C).toFixed(2) }), console.table(g), f;
717
524
  }
718
- async function kA() {
719
- try {
720
- const A = (await navigator.mediaDevices.enumerateDevices()).filter((g) => g.kind === "videoinput");
721
- return {
722
- available: A.length > 0,
723
- deviceCount: A.length,
724
- devices: A
725
- };
726
- } catch (I) {
727
- return console.error("Error checking webcam availability:", I), { available: !1, error: I.message };
728
- }
729
- }
730
- function fA(I, A = 800) {
525
+ function SA(I, A = 800) {
731
526
  const { width: g, height: C } = I, E = Math.max(g, C);
732
527
  if (E <= A)
733
528
  return {
@@ -738,26 +533,26 @@ function fA(I, A = 800) {
738
533
  };
739
534
  const B = A / E, Q = Math.round(g * B), i = Math.round(C * B), s = document.createElement("canvas");
740
535
  s.width = g, s.height = C, s.getContext("2d").putImageData(I, 0, 0);
741
- const o = document.createElement("canvas");
742
- o.width = Q, o.height = i;
743
- const n = o.getContext("2d");
744
- return n.imageSmoothingEnabled = !0, n.imageSmoothingQuality = "high", n.drawImage(s, 0, 0, g, C, 0, 0, Q, i), {
745
- scaledImageData: n.getImageData(0, 0, Q, i),
536
+ const t = document.createElement("canvas");
537
+ t.width = Q, t.height = i;
538
+ const e = t.getContext("2d");
539
+ return e.imageSmoothingEnabled = !0, e.imageSmoothingQuality = "high", e.drawImage(s, 0, 0, g, C, 0, 0, Q, i), {
540
+ scaledImageData: e.getImageData(0, 0, Q, i),
746
541
  scaleFactor: 1 / B,
747
542
  // Return inverse for compatibility with existing code
748
543
  originalDimensions: { width: g, height: C },
749
544
  scaledDimensions: { width: Q, height: i }
750
545
  };
751
546
  }
752
- async function JA(I, A = {}) {
753
- const g = A.debug ? {} : null, C = A.maxProcessingDimension || 800, { scaledImageData: E, scaleFactor: B, originalDimensions: Q, scaledDimensions: i } = fA(I, C);
547
+ async function MA(I, A = {}) {
548
+ const g = A.debug ? {} : null, C = A.maxProcessingDimension || 800, { scaledImageData: E, scaleFactor: B, originalDimensions: Q, scaledDimensions: i } = SA(I, C);
754
549
  g && (g.preprocessing = {
755
550
  originalDimensions: Q,
756
551
  scaledDimensions: i,
757
552
  scaleFactor: B,
758
553
  maxProcessingDimension: C
759
554
  });
760
- const { width: s, height: t } = E, o = await SA(E, {
555
+ const { width: s, height: o } = E, t = await JA(E, {
761
556
  lowThreshold: A.lowThreshold || 75,
762
557
  // Match OpenCV values
763
558
  highThreshold: A.highThreshold || 200,
@@ -766,44 +561,44 @@ async function JA(I, A = {}) {
766
561
  // Match OpenCV value
767
562
  dilationIterations: A.dilationIterations || 1,
768
563
  debug: g
769
- }), n = V(o, {
564
+ }), e = V(t, {
770
565
  minArea: (A.minArea || 1e3) / (B * B),
771
566
  // Adjust minArea for scaled image
772
567
  debug: g,
773
568
  width: s,
774
- height: t
569
+ height: o
775
570
  });
776
- if (!n || n.length === 0)
571
+ if (!e || e.length === 0)
777
572
  return console.log("No document detected"), {
778
573
  success: !1,
779
574
  message: "No document detected",
780
575
  debug: g
781
576
  };
782
- const e = n[0], a = EA(e, {
577
+ const a = e[0], D = EA(a, {
783
578
  epsilon: A.epsilon
784
579
  // Pass epsilon for approximation
785
580
  });
786
- let D = a;
787
- return B !== 1 && (D = {
788
- topLeft: { x: a.topLeft.x * B, y: a.topLeft.y * B },
789
- topRight: { x: a.topRight.x * B, y: a.topRight.y * B },
790
- bottomRight: { x: a.bottomRight.x * B, y: a.bottomRight.y * B },
791
- bottomLeft: { x: a.bottomLeft.x * B, y: a.bottomLeft.y * B }
581
+ let c = D;
582
+ return B !== 1 && (c = {
583
+ topLeft: { x: D.topLeft.x * B, y: D.topLeft.y * B },
584
+ topRight: { x: D.topRight.x * B, y: D.topRight.y * B },
585
+ bottomRight: { x: D.bottomRight.x * B, y: D.bottomRight.y * B },
586
+ bottomLeft: { x: D.bottomLeft.x * B, y: D.bottomLeft.y * B }
792
587
  }), {
793
588
  success: !0,
794
- contour: e,
795
- corners: D,
589
+ contour: a,
590
+ corners: c,
796
591
  debug: g
797
592
  };
798
593
  }
799
- function MA(I, A) {
594
+ function fA(I, A) {
800
595
  function g(s) {
801
- const t = [];
802
- for (let o = 0; o < 4; o++) {
803
- const [n, e] = s[o];
804
- t.push([n, e, 1, 0, 0, 0, -n * A[o][0], -e * A[o][0]]), t.push([0, 0, 0, n, e, 1, -n * A[o][1], -e * A[o][1]]);
596
+ const o = [];
597
+ for (let t = 0; t < 4; t++) {
598
+ const [e, a] = s[t];
599
+ o.push([e, a, 1, 0, 0, 0, -e * A[t][0], -a * A[t][0]]), o.push([0, 0, 0, e, a, 1, -e * A[t][1], -a * A[t][1]]);
805
600
  }
806
- return t;
601
+ return o;
807
602
  }
808
603
  const C = g(I), E = [
809
604
  A[0][0],
@@ -815,28 +610,28 @@ function MA(I, A) {
815
610
  A[3][0],
816
611
  A[3][1]
817
612
  ];
818
- function B(s, t) {
819
- const o = s.length, n = s[0].length, e = s.map((h) => h.slice()), a = t.slice();
820
- for (let h = 0; h < n; h++) {
821
- let y = h;
822
- for (let c = h + 1; c < o; c++)
823
- Math.abs(e[c][h]) > Math.abs(e[y][h]) && (y = c);
824
- [e[h], e[y]] = [e[y], e[h]], [a[h], a[y]] = [a[y], a[h]];
825
- for (let c = h + 1; c < o; c++) {
826
- const r = e[c][h] / e[h][h];
827
- for (let w = h; w < n; w++)
828
- e[c][w] -= r * e[h][w];
829
- a[c] -= r * a[h];
613
+ function B(s, o) {
614
+ const t = s.length, e = s[0].length, a = s.map((y) => y.slice()), D = o.slice();
615
+ for (let y = 0; y < e; y++) {
616
+ let w = y;
617
+ for (let n = y + 1; n < t; n++)
618
+ Math.abs(a[n][y]) > Math.abs(a[w][y]) && (w = n);
619
+ [a[y], a[w]] = [a[w], a[y]], [D[y], D[w]] = [D[w], D[y]];
620
+ for (let n = y + 1; n < t; n++) {
621
+ const h = a[n][y] / a[y][y];
622
+ for (let N = y; N < e; N++)
623
+ a[n][N] -= h * a[y][N];
624
+ D[n] -= h * D[y];
830
625
  }
831
626
  }
832
- const D = new Array(n);
833
- for (let h = n - 1; h >= 0; h--) {
834
- let y = a[h];
835
- for (let c = h + 1; c < n; c++)
836
- y -= e[h][c] * D[c];
837
- D[h] = y / e[h][h];
627
+ const c = new Array(e);
628
+ for (let y = e - 1; y >= 0; y--) {
629
+ let w = D[y];
630
+ for (let n = y + 1; n < e; n++)
631
+ w -= a[y][n] * c[n];
632
+ c[y] = w / a[y][y];
838
633
  }
839
- return D;
634
+ return c;
840
635
  }
841
636
  const Q = B(C, E);
842
637
  return [
@@ -845,48 +640,76 @@ function MA(I, A) {
845
640
  [Q[6], Q[7], 1]
846
641
  ];
847
642
  }
848
- function LA(I, A, g) {
849
- const { topLeft: C, topRight: E, bottomRight: B, bottomLeft: Q } = g, i = Math.hypot(B.x - Q.x, B.y - Q.y), s = Math.hypot(E.x - C.x, E.y - C.y), t = Math.round(Math.max(i, s)), o = Math.hypot(E.x - B.x, E.y - B.y), n = Math.hypot(C.x - Q.x, C.y - Q.y), e = Math.round(Math.max(o, n));
850
- I.canvas.width = t, I.canvas.height = e;
851
- const a = [
643
+ function j(I, A, g) {
644
+ const { topLeft: C, topRight: E, bottomRight: B, bottomLeft: Q } = g, i = Math.hypot(B.x - Q.x, B.y - Q.y), s = Math.hypot(E.x - C.x, E.y - C.y), o = Math.round(Math.max(i, s)), t = Math.hypot(E.x - B.x, E.y - B.y), e = Math.hypot(C.x - Q.x, C.y - Q.y), a = Math.round(Math.max(t, e));
645
+ I.canvas.width = o, I.canvas.height = a;
646
+ const D = [
852
647
  [C.x, C.y],
853
648
  [E.x, E.y],
854
649
  [B.x, B.y],
855
650
  [Q.x, Q.y]
856
- ], D = [
651
+ ], c = [
857
652
  [0, 0],
858
- [t - 1, 0],
859
- [t - 1, e - 1],
860
- [0, e - 1]
861
- ], h = MA(a, D);
862
- YA(I, A, h, t, e);
863
- }
864
- function mA(I) {
865
- const A = I[0][0], g = I[0][1], C = I[0][2], E = I[1][0], B = I[1][1], Q = I[1][2], i = I[2][0], s = I[2][1], t = I[2][2], o = B * t - Q * s, n = -(E * t - Q * i), e = E * s - B * i, a = -(g * t - C * s), D = A * t - C * i, h = -(A * s - g * i), y = g * Q - C * B, c = -(A * Q - C * E), r = A * B - g * E, w = A * o + g * n + C * e;
866
- if (w === 0) throw new Error("Singular matrix");
653
+ [o - 1, 0],
654
+ [o - 1, a - 1],
655
+ [0, a - 1]
656
+ ], y = fA(D, c);
657
+ LA(I, A, y, o, a);
658
+ }
659
+ function lA(I) {
660
+ const A = I[0][0], g = I[0][1], C = I[0][2], E = I[1][0], B = I[1][1], Q = I[1][2], i = I[2][0], s = I[2][1], o = I[2][2], t = B * o - Q * s, e = -(E * o - Q * i), a = E * s - B * i, D = -(g * o - C * s), c = A * o - C * i, y = -(A * s - g * i), w = g * Q - C * B, n = -(A * Q - C * E), h = A * B - g * E, N = A * t + g * e + C * a;
661
+ if (N === 0) throw new Error("Singular matrix");
867
662
  return [
868
- [o / w, a / w, y / w],
869
- [n / w, D / w, c / w],
870
- [e / w, h / w, r / w]
663
+ [t / N, D / N, w / N],
664
+ [e / N, c / N, n / N],
665
+ [a / N, y / N, h / N]
871
666
  ];
872
667
  }
873
- function YA(I, A, g, C, E) {
874
- const B = mA(g), Q = document.createElement("canvas");
668
+ function LA(I, A, g, C, E) {
669
+ const B = lA(g), Q = document.createElement("canvas");
875
670
  Q.width = A.width || A.naturalWidth, Q.height = A.height || A.naturalHeight;
876
671
  const i = Q.getContext("2d");
877
672
  i.drawImage(A, 0, 0, Q.width, Q.height);
878
- const s = i.getImageData(0, 0, Q.width, Q.height), t = I.createImageData(C, E);
879
- for (let o = 0; o < E; o++)
880
- for (let n = 0; n < C; n++) {
881
- const e = B[2][0] * n + B[2][1] * o + B[2][2], a = (B[0][0] * n + B[0][1] * o + B[0][2]) / e, D = (B[1][0] * n + B[1][1] * o + B[1][2]) / e, h = Math.max(0, Math.min(Q.width - 2, a)), y = Math.max(0, Math.min(Q.height - 2, D)), c = Math.floor(h), r = Math.floor(y), w = h - c, F = y - r;
882
- for (let R = 0; R < 4; R++) {
883
- const d = s.data[(r * Q.width + c) * 4 + R], S = s.data[(r * Q.width + (c + 1)) * 4 + R], G = s.data[((r + 1) * Q.width + c) * 4 + R], f = s.data[((r + 1) * Q.width + (c + 1)) * 4 + R];
884
- t.data[(o * C + n) * 4 + R] = (1 - w) * (1 - F) * d + w * (1 - F) * S + (1 - w) * F * G + w * F * f;
673
+ const s = i.getImageData(0, 0, Q.width, Q.height), o = I.createImageData(C, E);
674
+ for (let t = 0; t < E; t++)
675
+ for (let e = 0; e < C; e++) {
676
+ const a = B[2][0] * e + B[2][1] * t + B[2][2], D = (B[0][0] * e + B[0][1] * t + B[0][2]) / a, c = (B[1][0] * e + B[1][1] * t + B[1][2]) / a, y = Math.max(0, Math.min(Q.width - 2, D)), w = Math.max(0, Math.min(Q.height - 2, c)), n = Math.floor(y), h = Math.floor(w), N = y - n, F = w - h;
677
+ for (let G = 0; G < 4; G++) {
678
+ const S = s.data[(h * Q.width + n) * 4 + G], J = s.data[(h * Q.width + (n + 1)) * 4 + G], k = s.data[((h + 1) * Q.width + n) * 4 + G], f = s.data[((h + 1) * Q.width + (n + 1)) * 4 + G];
679
+ o.data[(t * C + e) * 4 + G] = (1 - N) * (1 - F) * S + N * (1 - F) * J + (1 - N) * F * k + N * F * f;
885
680
  }
886
681
  }
887
- I.putImageData(t, 0, 0);
682
+ I.putImageData(o, 0, 0);
683
+ }
684
+ async function YA(I, A, g = {}) {
685
+ const C = g.output || "canvas";
686
+ if (!A || !A.topLeft || !A.topRight || !A.bottomRight || !A.bottomLeft)
687
+ return {
688
+ output: null,
689
+ corners: null,
690
+ success: !1,
691
+ message: "Invalid corner points provided"
692
+ };
693
+ try {
694
+ const E = document.createElement("canvas"), B = E.getContext("2d");
695
+ j(B, I, A);
696
+ let Q;
697
+ return C === "canvas" ? Q = E : C === "imagedata" ? Q = E.getContext("2d").getImageData(0, 0, E.width, E.height) : C === "dataurl" ? Q = E.toDataURL() : Q = E, {
698
+ output: Q,
699
+ corners: A,
700
+ success: !0,
701
+ message: "Document extracted successfully"
702
+ };
703
+ } catch (E) {
704
+ return {
705
+ output: null,
706
+ corners: A,
707
+ success: !1,
708
+ message: `Extraction failed: ${E.message}`
709
+ };
710
+ }
888
711
  }
889
- async function X(I, A = {}) {
712
+ async function dA(I, A = {}) {
890
713
  const g = A.mode || "detect", C = A.output || "canvas";
891
714
  A.debug;
892
715
  let E;
@@ -895,10 +718,10 @@ async function X(I, A = {}) {
895
718
  else {
896
719
  const s = document.createElement("canvas");
897
720
  s.width = I.width || I.naturalWidth, s.height = I.height || I.naturalHeight;
898
- const t = s.getContext("2d");
899
- t.drawImage(I, 0, 0, s.width, s.height), E = t.getImageData(0, 0, s.width, s.height), s.width, s.height;
721
+ const o = s.getContext("2d");
722
+ o.drawImage(I, 0, 0, s.width, s.height), E = o.getImageData(0, 0, s.width, s.height), s.width, s.height;
900
723
  }
901
- const B = await JA(E, A);
724
+ const B = await MA(E, A);
902
725
  if (!B.success)
903
726
  return {
904
727
  output: null,
@@ -914,7 +737,7 @@ async function X(I, A = {}) {
914
737
  else if (g === "extract") {
915
738
  Q = document.createElement("canvas");
916
739
  const s = Q.getContext("2d");
917
- LA(s, I, B.corners);
740
+ j(s, I, B.corners);
918
741
  }
919
742
  return g !== "detect" && Q && (C === "canvas" ? i = Q : C === "imagedata" ? i = Q.getContext("2d").getImageData(0, 0, Q.width, Q.height) : C === "dataurl" ? i = Q.toDataURL() : i = Q), {
920
743
  output: i,
@@ -925,15 +748,8 @@ async function X(I, A = {}) {
925
748
  message: "Document detected"
926
749
  };
927
750
  }
928
- const uA = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
929
- __proto__: null,
930
- LiveScanner: dA,
931
- checkWebcamAvailability: kA,
932
- scanDocument: X
933
- }, Symbol.toStringTag, { value: "Module" }));
934
751
  export {
935
- dA as LiveScanner,
936
- kA as checkWebcamAvailability,
937
- X as scanDocument
752
+ YA as extractDocument,
753
+ dA as scanDocument
938
754
  };
939
755
  //# sourceMappingURL=scanic.js.map