@scanly/core 2.0.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.
Files changed (226) hide show
  1. package/README.md +3 -0
  2. package/dist/barcode/contracts.d.ts +44 -0
  3. package/dist/barcode/contracts.d.ts.map +1 -0
  4. package/dist/barcode/contracts.js +33 -0
  5. package/dist/barcode/contracts.js.map +1 -0
  6. package/dist/barcode/format-selection.d.ts +12 -0
  7. package/dist/barcode/format-selection.d.ts.map +1 -0
  8. package/dist/barcode/format-selection.js +32 -0
  9. package/dist/barcode/format-selection.js.map +1 -0
  10. package/dist/barcode/format.d.ts +7 -0
  11. package/dist/barcode/format.d.ts.map +1 -0
  12. package/dist/barcode/format.js +20 -0
  13. package/dist/barcode/format.js.map +1 -0
  14. package/dist/barcode/index.d.ts +5 -0
  15. package/dist/barcode/index.d.ts.map +1 -0
  16. package/dist/barcode/index.js +5 -0
  17. package/dist/barcode/index.js.map +1 -0
  18. package/dist/barcode/retail.d.ts +16 -0
  19. package/dist/barcode/retail.d.ts.map +1 -0
  20. package/dist/barcode/retail.js +95 -0
  21. package/dist/barcode/retail.js.map +1 -0
  22. package/dist/contracts/engine.d.ts +84 -0
  23. package/dist/contracts/engine.d.ts.map +1 -0
  24. package/dist/contracts/engine.js +2 -0
  25. package/dist/contracts/engine.js.map +1 -0
  26. package/dist/contracts/errors.d.ts +17 -0
  27. package/dist/contracts/errors.d.ts.map +1 -0
  28. package/dist/contracts/errors.js +31 -0
  29. package/dist/contracts/errors.js.map +1 -0
  30. package/dist/contracts/frame.d.ts +37 -0
  31. package/dist/contracts/frame.d.ts.map +1 -0
  32. package/dist/contracts/frame.js +77 -0
  33. package/dist/contracts/frame.js.map +1 -0
  34. package/dist/contracts/operator.d.ts +46 -0
  35. package/dist/contracts/operator.d.ts.map +1 -0
  36. package/dist/contracts/operator.js +14 -0
  37. package/dist/contracts/operator.js.map +1 -0
  38. package/dist/contracts/result.d.ts +135 -0
  39. package/dist/contracts/result.d.ts.map +1 -0
  40. package/dist/contracts/result.js +2 -0
  41. package/dist/contracts/result.js.map +1 -0
  42. package/dist/contracts/validator.d.ts +15 -0
  43. package/dist/contracts/validator.d.ts.map +1 -0
  44. package/dist/contracts/validator.js +2 -0
  45. package/dist/contracts/validator.js.map +1 -0
  46. package/dist/index.d.ts +29 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +28 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/industrial/candidate-region.d.ts +15 -0
  51. package/dist/industrial/candidate-region.d.ts.map +1 -0
  52. package/dist/industrial/candidate-region.js +108 -0
  53. package/dist/industrial/candidate-region.js.map +1 -0
  54. package/dist/industrial/coordinate-transform.d.ts +9 -0
  55. package/dist/industrial/coordinate-transform.d.ts.map +1 -0
  56. package/dist/industrial/coordinate-transform.js +42 -0
  57. package/dist/industrial/coordinate-transform.js.map +1 -0
  58. package/dist/industrial/decode-candidate-conflict.d.ts +8 -0
  59. package/dist/industrial/decode-candidate-conflict.d.ts.map +1 -0
  60. package/dist/industrial/decode-candidate-conflict.js +97 -0
  61. package/dist/industrial/decode-candidate-conflict.js.map +1 -0
  62. package/dist/industrial/difficulty-diagnosis.d.ts +15 -0
  63. package/dist/industrial/difficulty-diagnosis.d.ts.map +1 -0
  64. package/dist/industrial/difficulty-diagnosis.js +291 -0
  65. package/dist/industrial/difficulty-diagnosis.js.map +1 -0
  66. package/dist/industrial/index.d.ts +13 -0
  67. package/dist/industrial/index.d.ts.map +1 -0
  68. package/dist/industrial/index.js +13 -0
  69. package/dist/industrial/index.js.map +1 -0
  70. package/dist/industrial/memory.d.ts +28 -0
  71. package/dist/industrial/memory.d.ts.map +1 -0
  72. package/dist/industrial/memory.js +65 -0
  73. package/dist/industrial/memory.js.map +1 -0
  74. package/dist/industrial/pixels.d.ts +44 -0
  75. package/dist/industrial/pixels.d.ts.map +1 -0
  76. package/dist/industrial/pixels.js +295 -0
  77. package/dist/industrial/pixels.js.map +1 -0
  78. package/dist/industrial/recovery-pipeline.d.ts +26 -0
  79. package/dist/industrial/recovery-pipeline.d.ts.map +1 -0
  80. package/dist/industrial/recovery-pipeline.js +149 -0
  81. package/dist/industrial/recovery-pipeline.js.map +1 -0
  82. package/dist/industrial/recovery-planner.d.ts +10 -0
  83. package/dist/industrial/recovery-planner.d.ts.map +1 -0
  84. package/dist/industrial/recovery-planner.js +107 -0
  85. package/dist/industrial/recovery-planner.js.map +1 -0
  86. package/dist/industrial/recovery-route-registry.d.ts +12 -0
  87. package/dist/industrial/recovery-route-registry.d.ts.map +1 -0
  88. package/dist/industrial/recovery-route-registry.js +15 -0
  89. package/dist/industrial/recovery-route-registry.js.map +1 -0
  90. package/dist/industrial/recovery-routes.d.ts +89 -0
  91. package/dist/industrial/recovery-routes.d.ts.map +1 -0
  92. package/dist/industrial/recovery-routes.js +280 -0
  93. package/dist/industrial/recovery-routes.js.map +1 -0
  94. package/dist/industrial/scan-evidence.d.ts +5 -0
  95. package/dist/industrial/scan-evidence.d.ts.map +1 -0
  96. package/dist/industrial/scan-evidence.js +63 -0
  97. package/dist/industrial/scan-evidence.js.map +1 -0
  98. package/dist/industrial/scanner-diagnostics.d.ts +19 -0
  99. package/dist/industrial/scanner-diagnostics.d.ts.map +1 -0
  100. package/dist/industrial/scanner-diagnostics.js +35 -0
  101. package/dist/industrial/scanner-diagnostics.js.map +1 -0
  102. package/dist/industrial/types.d.ts +189 -0
  103. package/dist/industrial/types.d.ts.map +1 -0
  104. package/dist/industrial/types.js +2 -0
  105. package/dist/industrial/types.js.map +1 -0
  106. package/dist/node.d.ts +2 -0
  107. package/dist/node.d.ts.map +1 -0
  108. package/dist/node.js +2 -0
  109. package/dist/node.js.map +1 -0
  110. package/dist/qr/candidate-dedupe.d.ts +6 -0
  111. package/dist/qr/candidate-dedupe.d.ts.map +1 -0
  112. package/dist/qr/candidate-dedupe.js +27 -0
  113. package/dist/qr/candidate-dedupe.js.map +1 -0
  114. package/dist/qr/candidate-generation.d.ts +46 -0
  115. package/dist/qr/candidate-generation.d.ts.map +1 -0
  116. package/dist/qr/candidate-generation.js +277 -0
  117. package/dist/qr/candidate-generation.js.map +1 -0
  118. package/dist/qr/decode-pipeline.d.ts +14 -0
  119. package/dist/qr/decode-pipeline.d.ts.map +1 -0
  120. package/dist/qr/decode-pipeline.js +615 -0
  121. package/dist/qr/decode-pipeline.js.map +1 -0
  122. package/dist/qr/geometry.d.ts +24 -0
  123. package/dist/qr/geometry.d.ts.map +1 -0
  124. package/dist/qr/geometry.js +64 -0
  125. package/dist/qr/geometry.js.map +1 -0
  126. package/dist/qr/grayscale.d.ts +13 -0
  127. package/dist/qr/grayscale.d.ts.map +1 -0
  128. package/dist/qr/grayscale.js +46 -0
  129. package/dist/qr/grayscale.js.map +1 -0
  130. package/dist/qr/image-loader-node.d.ts +4 -0
  131. package/dist/qr/image-loader-node.d.ts.map +1 -0
  132. package/dist/qr/image-loader-node.js +26 -0
  133. package/dist/qr/image-loader-node.js.map +1 -0
  134. package/dist/qr/index.d.ts +15 -0
  135. package/dist/qr/index.d.ts.map +1 -0
  136. package/dist/qr/index.js +15 -0
  137. package/dist/qr/index.js.map +1 -0
  138. package/dist/qr/jsqr-decoder.d.ts +10 -0
  139. package/dist/qr/jsqr-decoder.d.ts.map +1 -0
  140. package/dist/qr/jsqr-decoder.js +18 -0
  141. package/dist/qr/jsqr-decoder.js.map +1 -0
  142. package/dist/qr/preprocess.d.ts +18 -0
  143. package/dist/qr/preprocess.d.ts.map +1 -0
  144. package/dist/qr/preprocess.js +165 -0
  145. package/dist/qr/preprocess.js.map +1 -0
  146. package/dist/qr/region-detection.d.ts +25 -0
  147. package/dist/qr/region-detection.d.ts.map +1 -0
  148. package/dist/qr/region-detection.js +129 -0
  149. package/dist/qr/region-detection.js.map +1 -0
  150. package/dist/qr/result-normalizer.d.ts +9 -0
  151. package/dist/qr/result-normalizer.d.ts.map +1 -0
  152. package/dist/qr/result-normalizer.js +70 -0
  153. package/dist/qr/result-normalizer.js.map +1 -0
  154. package/dist/qr/rotate.d.ts +5 -0
  155. package/dist/qr/rotate.d.ts.map +1 -0
  156. package/dist/qr/rotate.js +51 -0
  157. package/dist/qr/rotate.js.map +1 -0
  158. package/dist/qr/types.d.ts +186 -0
  159. package/dist/qr/types.d.ts.map +1 -0
  160. package/dist/qr/types.js +67 -0
  161. package/dist/qr/types.js.map +1 -0
  162. package/dist/qr/zxing-decoder.d.ts +8 -0
  163. package/dist/qr/zxing-decoder.d.ts.map +1 -0
  164. package/dist/qr/zxing-decoder.js +33 -0
  165. package/dist/qr/zxing-decoder.js.map +1 -0
  166. package/dist/runtime/artifacts.d.ts +16 -0
  167. package/dist/runtime/artifacts.d.ts.map +1 -0
  168. package/dist/runtime/artifacts.js +52 -0
  169. package/dist/runtime/artifacts.js.map +1 -0
  170. package/dist/runtime/builtin-operators.d.ts +12 -0
  171. package/dist/runtime/builtin-operators.d.ts.map +1 -0
  172. package/dist/runtime/builtin-operators.js +487 -0
  173. package/dist/runtime/builtin-operators.js.map +1 -0
  174. package/dist/runtime/capabilities.d.ts +32 -0
  175. package/dist/runtime/capabilities.d.ts.map +1 -0
  176. package/dist/runtime/capabilities.js +18 -0
  177. package/dist/runtime/capabilities.js.map +1 -0
  178. package/dist/runtime/engine-registry.d.ts +19 -0
  179. package/dist/runtime/engine-registry.d.ts.map +1 -0
  180. package/dist/runtime/engine-registry.js +136 -0
  181. package/dist/runtime/engine-registry.js.map +1 -0
  182. package/dist/runtime/execution-budget.d.ts +25 -0
  183. package/dist/runtime/execution-budget.d.ts.map +1 -0
  184. package/dist/runtime/execution-budget.js +41 -0
  185. package/dist/runtime/execution-budget.js.map +1 -0
  186. package/dist/runtime/frame-lease.d.ts +10 -0
  187. package/dist/runtime/frame-lease.d.ts.map +1 -0
  188. package/dist/runtime/frame-lease.js +17 -0
  189. package/dist/runtime/frame-lease.js.map +1 -0
  190. package/dist/runtime/frame-normalization.d.ts +13 -0
  191. package/dist/runtime/frame-normalization.d.ts.map +1 -0
  192. package/dist/runtime/frame-normalization.js +21 -0
  193. package/dist/runtime/frame-normalization.js.map +1 -0
  194. package/dist/runtime/memory-budget.d.ts +32 -0
  195. package/dist/runtime/memory-budget.d.ts.map +1 -0
  196. package/dist/runtime/memory-budget.js +109 -0
  197. package/dist/runtime/memory-budget.js.map +1 -0
  198. package/dist/runtime/operator-registry.d.ts +11 -0
  199. package/dist/runtime/operator-registry.d.ts.map +1 -0
  200. package/dist/runtime/operator-registry.js +19 -0
  201. package/dist/runtime/operator-registry.js.map +1 -0
  202. package/dist/runtime/result-policies.d.ts +21 -0
  203. package/dist/runtime/result-policies.d.ts.map +1 -0
  204. package/dist/runtime/result-policies.js +62 -0
  205. package/dist/runtime/result-policies.js.map +1 -0
  206. package/dist/runtime/router.d.ts +45 -0
  207. package/dist/runtime/router.d.ts.map +1 -0
  208. package/dist/runtime/router.js +202 -0
  209. package/dist/runtime/router.js.map +1 -0
  210. package/dist/runtime/scenario-compiler.d.ts +32 -0
  211. package/dist/runtime/scenario-compiler.d.ts.map +1 -0
  212. package/dist/runtime/scenario-compiler.js +131 -0
  213. package/dist/runtime/scenario-compiler.js.map +1 -0
  214. package/dist/runtime/scenario-runtime.d.ts +4 -0
  215. package/dist/runtime/scenario-runtime.d.ts.map +1 -0
  216. package/dist/runtime/scenario-runtime.js +32 -0
  217. package/dist/runtime/scenario-runtime.js.map +1 -0
  218. package/dist/runtime/session.d.ts +40 -0
  219. package/dist/runtime/session.d.ts.map +1 -0
  220. package/dist/runtime/session.js +117 -0
  221. package/dist/runtime/session.js.map +1 -0
  222. package/dist/runtime/validator-registry.d.ts +11 -0
  223. package/dist/runtime/validator-registry.d.ts.map +1 -0
  224. package/dist/runtime/validator-registry.js +16 -0
  225. package/dist/runtime/validator-registry.js.map +1 -0
  226. package/package.json +39 -0
@@ -0,0 +1,107 @@
1
+ import { RecoveryRouteRegistry } from "./recovery-route-registry.js";
2
+ export function recoveryBudgetFor(profile, sourceMode, framePixels) {
3
+ const pixels = Math.max(1, Math.floor(framePixels));
4
+ if (sourceMode === "camera") {
5
+ if (profile === "fast")
6
+ return budget(1, 1, pixels * 2, 32, 2, 1, 16 * 1024 * 1024);
7
+ if (profile === "balanced")
8
+ return budget(2, 3, pixels * 4, 75, 3, 1, 32 * 1024 * 1024);
9
+ if (profile === "robust")
10
+ return budget(4, 6, pixels * 7, 180, 4, 2, 64 * 1024 * 1024);
11
+ if (profile === "dpm-experimental")
12
+ return budget(4, 7, pixels * 8, 220, 4, 2, 64 * 1024 * 1024);
13
+ return budget(5, 8, pixels * 9, 260, 5, 2, 80 * 1024 * 1024);
14
+ }
15
+ if (profile === "fast")
16
+ return budget(1, 2, pixels * 3, 250, 2, 1, 32 * 1024 * 1024);
17
+ if (profile === "balanced")
18
+ return budget(3, 5, pixels * 7, 800, 4, 2, 64 * 1024 * 1024);
19
+ if (profile === "robust")
20
+ return budget(5, 9, pixels * 12, 2_000, 6, 3, 96 * 1024 * 1024);
21
+ if (profile === "dpm-experimental")
22
+ return budget(6, 11, pixels * 15, 3_000, 6, 3, 128 * 1024 * 1024);
23
+ return budget(7, 12, pixels * 16, 3_000, 8, 4, 128 * 1024 * 1024);
24
+ }
25
+ export class RecoveryPlanner {
26
+ registry;
27
+ constructor(registry) {
28
+ this.registry = registry;
29
+ }
30
+ plan(context) {
31
+ validateBudget(context.budget);
32
+ const excluded = new Set(context.excludedRoutes ?? []);
33
+ // BarcodeDifficultyAnalyzer already orders routes by descending heuristic
34
+ // evidence. Preserve that ranking so a high-confidence specialized route
35
+ // is not displaced by a fixed generic route order.
36
+ const ranked = [...new Set(context.diagnosis.recommendedRoutes)];
37
+ if (context.profile === "robust" || context.profile === "industrial" || context.profile === "dpm-experimental") {
38
+ const fallback = [];
39
+ if (context.candidateRegions.length)
40
+ fallback.push("perspective");
41
+ if ((context.diagnosis.evidence.estimatedPixelsPerModule ?? 99) < 5 || context.candidateRegions.some((region) => region.difficultyHints.includes("small-module")))
42
+ fallback.push("small-module");
43
+ if ((context.diagnosis.evidence.damageScore ?? 0) > 0.1)
44
+ fallback.push("damaged");
45
+ if ((context.diagnosis.evidence.busyBorderRatio ?? 0) > 0.2)
46
+ fallback.push("quiet-zone");
47
+ for (const route of fallback)
48
+ if (!ranked.includes(route))
49
+ ranked.push(route);
50
+ }
51
+ const rejected = [];
52
+ const entries = [];
53
+ let estimatedPixels = 0;
54
+ for (const routeId of ranked) {
55
+ if (entries.length >= context.budget.maximumRoutes) {
56
+ rejected.push({ routeId, reason: "maximum-routes" });
57
+ continue;
58
+ }
59
+ if (excluded.has(routeId)) {
60
+ rejected.push({ routeId, reason: "ablation-excluded" });
61
+ continue;
62
+ }
63
+ if (routeId === "dpm" && !context.dpmExperimentalEnabled) {
64
+ rejected.push({ routeId, reason: "dpm-experimental-disabled" });
65
+ continue;
66
+ }
67
+ const route = this.registry.get(routeId);
68
+ if (!route) {
69
+ rejected.push({ routeId, reason: "route-not-registered" });
70
+ continue;
71
+ }
72
+ if (!route.supports(context)) {
73
+ rejected.push({ routeId, reason: "route-not-supported" });
74
+ continue;
75
+ }
76
+ const estimatedCost = Math.max(0, Math.ceil(route.estimateCost(context)));
77
+ if (estimatedPixels + estimatedCost > context.budget.maximumPixelsProcessed) {
78
+ rejected.push({ routeId, reason: "pixel-budget" });
79
+ continue;
80
+ }
81
+ entries.push({ routeId, estimatedCost, reason: `diagnosis:${routeId}` });
82
+ estimatedPixels += estimatedCost;
83
+ }
84
+ return { entries, budget: { ...context.budget }, rejected };
85
+ }
86
+ }
87
+ function budget(maximumRoutes, maximumAttempts, maximumPixelsProcessed, maximumTotalMs, maximumCandidates, maximumPerspectiveTransforms, maximumTemporaryBytes) {
88
+ return {
89
+ maximumRoutes, maximumAttempts, maximumPixelsProcessed, maximumTotalMs,
90
+ maximumCandidates, maximumPerspectiveTransforms,
91
+ maximumRectifiedArea: Math.min(maximumPixelsProcessed, 4_000_000), maximumTemporaryBytes,
92
+ };
93
+ }
94
+ export function validateBudget(value) {
95
+ for (const key of ["maximumRoutes", "maximumAttempts", "maximumPixelsProcessed"]) {
96
+ if (!Number.isSafeInteger(value[key]) || value[key] < 1)
97
+ throw new RangeError(`${key} must be a positive integer.`);
98
+ }
99
+ for (const key of ["maximumCandidates", "maximumRectifiedArea", "maximumPerspectiveTransforms", "maximumTemporaryBytes"]) {
100
+ const entry = value[key];
101
+ if (entry !== undefined && (!Number.isSafeInteger(entry) || entry < 1))
102
+ throw new RangeError(`${key} must be a positive integer when supplied.`);
103
+ }
104
+ if (value.maximumTotalMs !== undefined && (!Number.isFinite(value.maximumTotalMs) || value.maximumTotalMs <= 0))
105
+ throw new RangeError("maximumTotalMs must be positive when supplied.");
106
+ }
107
+ //# sourceMappingURL=recovery-planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery-planner.js","sourceRoot":"","sources":["../../src/industrial/recovery-planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { RecoveryRoute, RecoveryRouteId } from "./types.js";
2
+ export declare class RecoveryRouteRegistry {
3
+ private readonly routes;
4
+ register(route: RecoveryRoute, options?: {
5
+ replace?: boolean;
6
+ }): void;
7
+ unregister(id: RecoveryRouteId): void;
8
+ get(id: RecoveryRouteId): RecoveryRoute | undefined;
9
+ list(): readonly RecoveryRoute[];
10
+ get size(): number;
11
+ }
12
+ //# sourceMappingURL=recovery-route-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery-route-registry.d.ts","sourceRoot":"","sources":["../../src/industrial/recovery-route-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjE,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;IAEpE,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI;IAMzE,UAAU,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI;IACrC,GAAG,CAAC,EAAE,EAAE,eAAe,GAAG,aAAa,GAAG,SAAS;IACnD,IAAI,IAAI,SAAS,aAAa,EAAE;IAChC,IAAI,IAAI,IAAI,MAAM,CAA6B;CAChD"}
@@ -0,0 +1,15 @@
1
+ export class RecoveryRouteRegistry {
2
+ routes = new Map();
3
+ register(route, options = {}) {
4
+ if (!route || typeof route.id !== "string")
5
+ throw new TypeError("Recovery route must define an id.");
6
+ if (this.routes.has(route.id) && !options.replace)
7
+ throw new Error(`Recovery route '${route.id}' is already registered.`);
8
+ this.routes.set(route.id, route);
9
+ }
10
+ unregister(id) { this.routes.delete(id); }
11
+ get(id) { return this.routes.get(id); }
12
+ list() { return Object.freeze([...this.routes.values()]); }
13
+ get size() { return this.routes.size; }
14
+ }
15
+ //# sourceMappingURL=recovery-route-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery-route-registry.js","sourceRoot":"","sources":["../../src/industrial/recovery-route-registry.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,qBAAqB;IACf,MAAM,GAAG,IAAI,GAAG,EAAkC,CAAC;IAEpE,QAAQ,CAAC,KAAoB,EAAE,UAAiC,EAAE;QAChE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;YAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;QACrG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,EAAE,0BAA0B,CAAC,CAAC;QAC1H,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,UAAU,CAAC,EAAmB,IAAU,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,GAAG,CAAC,EAAmB,IAA+B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnF,IAAI,KAA+B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;CAChD"}
@@ -0,0 +1,89 @@
1
+ import type { NormalizedFrame } from "../contracts/frame.js";
2
+ import { RecoveryRouteRegistry } from "./recovery-route-registry.js";
3
+ import type { RecoveryContext, RecoveryCandidate, RecoveryRoute } from "./types.js";
4
+ export declare class LowContrastRecoveryRoute implements RecoveryRoute {
5
+ readonly id: "low-contrast";
6
+ supports(context: RecoveryContext): boolean;
7
+ estimateCost(context: RecoveryContext): number;
8
+ run(frame: NormalizedFrame, context: RecoveryContext): Promise<RecoveryCandidate[]>;
9
+ }
10
+ export declare class IlluminationRecoveryRoute implements RecoveryRoute {
11
+ readonly id: "illumination";
12
+ supports(context: RecoveryContext): boolean;
13
+ estimateCost(context: RecoveryContext): number;
14
+ run(frame: NormalizedFrame, context: RecoveryContext): Promise<RecoveryCandidate[]>;
15
+ }
16
+ export declare class BlurRecoveryRoute implements RecoveryRoute {
17
+ readonly id: "blur";
18
+ supports(context: RecoveryContext): boolean;
19
+ estimateCost(context: RecoveryContext): number;
20
+ run(frame: NormalizedFrame, context: RecoveryContext): Promise<RecoveryCandidate[]>;
21
+ }
22
+ export declare class GlareRecoveryRoute implements RecoveryRoute {
23
+ readonly id: "glare";
24
+ supports(context: RecoveryContext): boolean;
25
+ estimateCost(context: RecoveryContext): number;
26
+ run(frame: NormalizedFrame, context: RecoveryContext): Promise<RecoveryCandidate[]>;
27
+ }
28
+ export declare class PerspectiveRecoveryRoute implements RecoveryRoute {
29
+ readonly id: "perspective";
30
+ supports(context: RecoveryContext): boolean;
31
+ estimateCost(context: RecoveryContext): number;
32
+ run(frame: NormalizedFrame, context: RecoveryContext): Promise<RecoveryCandidate[]>;
33
+ }
34
+ export interface CurvatureEstimate {
35
+ strength: number;
36
+ confidence: number;
37
+ direction: "horizontal" | "vertical";
38
+ }
39
+ export interface CurvedBarcodeCandidate extends RecoveryCandidate {
40
+ curvature: CurvatureEstimate;
41
+ }
42
+ export declare class CurvatureEstimator {
43
+ estimate(context: RecoveryContext): CurvatureEstimate;
44
+ }
45
+ export declare class CurvedRecoveryRoute implements RecoveryRoute {
46
+ readonly id: "curved";
47
+ private readonly estimator;
48
+ supports(context: RecoveryContext): boolean;
49
+ estimateCost(context: RecoveryContext): number;
50
+ run(frame: NormalizedFrame, context: RecoveryContext): Promise<RecoveryCandidate[]>;
51
+ }
52
+ export declare class SmallModuleRecoveryRoute implements RecoveryRoute {
53
+ readonly id: "small-module";
54
+ supports(context: RecoveryContext): boolean;
55
+ estimateCost(context: RecoveryContext): number;
56
+ run(frame: NormalizedFrame, context: RecoveryContext): Promise<RecoveryCandidate[]>;
57
+ }
58
+ export declare class DamagedRecoveryRoute implements RecoveryRoute {
59
+ readonly id: "damaged";
60
+ supports(context: RecoveryContext): boolean;
61
+ estimateCost(context: RecoveryContext): number;
62
+ run(frame: NormalizedFrame, context: RecoveryContext): Promise<RecoveryCandidate[]>;
63
+ }
64
+ export declare class QuietZoneRecoveryRoute implements RecoveryRoute {
65
+ readonly id: "quiet-zone";
66
+ supports(context: RecoveryContext): boolean;
67
+ estimateCost(context: RecoveryContext): number;
68
+ run(frame: NormalizedFrame, context: RecoveryContext): Promise<RecoveryCandidate[]>;
69
+ }
70
+ export declare class ScreenRecoveryRoute implements RecoveryRoute {
71
+ readonly id: "screen";
72
+ supports(context: RecoveryContext): boolean;
73
+ estimateCost(context: RecoveryContext): number;
74
+ run(frame: NormalizedFrame, context: RecoveryContext): Promise<RecoveryCandidate[]>;
75
+ }
76
+ export declare class DpmExperimentalRecoveryRoute implements RecoveryRoute {
77
+ readonly id: "dpm";
78
+ supports(context: RecoveryContext): boolean;
79
+ estimateCost(context: RecoveryContext): number;
80
+ run(frame: NormalizedFrame, context: RecoveryContext): Promise<RecoveryCandidate[]>;
81
+ }
82
+ export declare class GeneralRecoveryRoute implements RecoveryRoute {
83
+ readonly id: "general";
84
+ supports(): boolean;
85
+ estimateCost(context: RecoveryContext): number;
86
+ run(frame: NormalizedFrame): Promise<RecoveryCandidate[]>;
87
+ }
88
+ export declare function registerDefaultRecoveryRoutes(registry?: RecoveryRouteRegistry): RecoveryRouteRegistry;
89
+ //# sourceMappingURL=recovery-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery-routes.d.ts","sourceRoot":"","sources":["../../src/industrial/recovery-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,280 @@
1
+ import { affineRecoveryTransform, composeRecoveryTransforms, curvedRecoveryTransform, projectiveRecoveryTransform } from "./coordinate-transform.js";
2
+ import { RecoveryRouteRegistry } from "./recovery-route-registry.js";
3
+ import { adaptiveThreshold, asRgba, claheLike, createRecoveryCandidate, glareAlternative, illuminationNormalize, localContrastNormalize, morphologicalClose, morphologicalGradient, morphologicalOpen, originalRecoveryCandidate, padNeutral, resizeBilinear, resizeNearest, unsharpMask, writeSample } from "./pixels.js";
4
+ export class LowContrastRecoveryRoute {
5
+ id = "low-contrast";
6
+ supports(context) { return context.diagnosis.lowContrast !== "none" || context.diagnosis.underexposure !== "none" || context.diagnosis.overexposure !== "none"; }
7
+ estimateCost(context) { return context.framePixels * Math.min(3, context.budget.maximumCandidates ?? 2); }
8
+ async run(frame, context) {
9
+ const data = asRgba(frame);
10
+ const results = [];
11
+ if (canAdd(context, results))
12
+ results.push(createRecoveryCandidate(frame, this.id, localContrastNormalize(data, frame.width, frame.height), frame.width, frame.height, identity(), context.memory, "normalized", ["local-contrast-normalization"]));
13
+ if (canAdd(context, results))
14
+ results.push(createRecoveryCandidate(frame, this.id, claheLike(data, frame.width, frame.height), frame.width, frame.height, identity(), context.memory, "grayscale", ["clahe-like-clipped-local-contrast"]));
15
+ if (canAdd(context, results))
16
+ results.push(createRecoveryCandidate(frame, this.id, adaptiveThreshold(data, frame.width, frame.height), frame.width, frame.height, identity(), context.memory, "binary", ["adaptive-threshold"]));
17
+ return results;
18
+ }
19
+ }
20
+ export class IlluminationRecoveryRoute {
21
+ id = "illumination";
22
+ supports(context) { return (context.diagnosis.evidence.illuminationVariation ?? 0) > 0.075 || context.diagnosis.underexposure !== "none" || context.diagnosis.overexposure !== "none"; }
23
+ estimateCost(context) { return context.framePixels; }
24
+ async run(frame, context) {
25
+ return [createRecoveryCandidate(frame, this.id, illuminationNormalize(asRgba(frame), frame.width, frame.height), frame.width, frame.height, identity(), context.memory, "normalized", ["local-background-illumination-estimate", "illumination-normalize"])];
26
+ }
27
+ }
28
+ export class BlurRecoveryRoute {
29
+ id = "blur";
30
+ supports(context) { return context.diagnosis.blur !== "none" || context.diagnosis.motionBlur !== "none"; }
31
+ estimateCost(context) { return context.framePixels; }
32
+ async run(frame, context) {
33
+ const data = asRgba(frame);
34
+ const direction = context.diagnosis.motionBlur !== "none" ? (context.diagnosis.evidence.anisotropy > 0.32 ? "horizontal" : "vertical") : "both";
35
+ return [createRecoveryCandidate(frame, this.id, unsharpMask(data, frame.width, frame.height, 1.1, direction), frame.width, frame.height, identity(), context.memory, "normalized", ["diagnosed-blur", `direction-aware-${direction}-unsharp-mask`])];
36
+ }
37
+ }
38
+ export class GlareRecoveryRoute {
39
+ id = "glare";
40
+ supports(context) { return context.diagnosis.glare !== "none" && ["robust", "industrial", "dpm-experimental"].includes(context.profile); }
41
+ estimateCost(context) { return context.framePixels; }
42
+ async run(frame, context) {
43
+ const result = glareAlternative(asRgba(frame), frame.width, frame.height);
44
+ if (result.glareRatio >= 0.45)
45
+ return [];
46
+ return [createRecoveryCandidate(frame, this.id, result.data, frame.width, frame.height, identity(), context.memory, "binary", ["saturated-region-mask", "alternate-threshold", "glare-not-dominated"])];
47
+ }
48
+ }
49
+ export class PerspectiveRecoveryRoute {
50
+ id = "perspective";
51
+ supports(context) { return context.diagnosis.perspectiveDistortion !== "none" || (["robust", "industrial", "dpm-experimental"].includes(context.profile) && context.candidateRegions.length > 0); }
52
+ estimateCost(context) { return Math.min(context.budget.maximumRectifiedArea ?? context.framePixels, context.framePixels) * Math.min(3, context.budget.maximumPerspectiveTransforms ?? 1); }
53
+ async run(frame, context) {
54
+ const maximumTransforms = context.budget.maximumPerspectiveTransforms ?? 1;
55
+ if (maximumTransforms < 1)
56
+ return [];
57
+ const fullFrame = { x: 0, y: 0, width: frame.width, height: frame.height };
58
+ const diagnosedScore = context.diagnosis.evidence.perspectiveScore ?? 0;
59
+ const specifications = context.candidateRegions.slice(0, Math.max(0, maximumTransforms - 2)).map((candidate) => ({ region: candidate.boundingBox, score: diagnosedScore, reason: "candidate-region" }));
60
+ specifications.push({ region: fullFrame, score: diagnosedScore, reason: "full-frame-fallback" });
61
+ if (specifications.length < maximumTransforms && diagnosedScore < 0.98)
62
+ specifications.push({ region: fullFrame, score: Math.min(1, diagnosedScore + 0.2), reason: "full-frame-stronger-hypothesis" });
63
+ const data = asRgba(frame);
64
+ const results = [];
65
+ for (const specification of specifications.slice(0, maximumTransforms)) {
66
+ const region = specification.region;
67
+ const quad = estimateQuadrilateral(region, specification.score);
68
+ const area = Math.max(1, region.width * region.height);
69
+ const ratio = region.width / Math.max(1, region.height);
70
+ const targetWidth = clampInt(Math.sqrt(area * ratio), 32, 1_024);
71
+ const targetHeight = clampInt(Math.sqrt(area / Math.max(0.01, ratio)), 32, 1_024);
72
+ if (targetWidth * targetHeight > (context.budget.maximumRectifiedArea ?? Number.MAX_SAFE_INTEGER))
73
+ continue;
74
+ const destination = [{ x: 0, y: 0 }, { x: targetWidth - 1, y: 0 }, { x: targetWidth - 1, y: targetHeight - 1 }, { x: 0, y: targetHeight - 1 }];
75
+ const sourceToDestination = solveHomography(quad, destination);
76
+ const destinationToSource = solveHomography(destination, quad);
77
+ const rectified = new Uint8ClampedArray(targetWidth * targetHeight * 4);
78
+ for (let y = 0; y < targetHeight; y += 1)
79
+ for (let x = 0; x < targetWidth; x += 1)
80
+ writeSample(rectified, (y * targetWidth + x) * 4, data, frame.width, frame.height, ...pointTuple(project(destinationToSource, { x, y })));
81
+ results.push(createRecoveryCandidate(frame, this.id, rectified, targetWidth, targetHeight, projectiveRecoveryTransform(destinationToSource, sourceToDestination), context.memory, "rectified", ["quadrilateral-estimate", "bounded-homography", specification.reason, `perspective-score:${specification.score.toFixed(3)}`, `rectified-area:${targetWidth * targetHeight}`]));
82
+ if (!canAdd(context, results))
83
+ break;
84
+ }
85
+ return results;
86
+ }
87
+ }
88
+ export class CurvatureEstimator {
89
+ estimate(context) {
90
+ const score = context.diagnosis.evidence.curvatureScore ?? 0;
91
+ return { strength: Math.max(0.04, Math.min(0.28, score * 0.22)), confidence: Math.min(1, score), direction: "horizontal" };
92
+ }
93
+ }
94
+ export class CurvedRecoveryRoute {
95
+ id = "curved";
96
+ estimator = new CurvatureEstimator();
97
+ supports(context) { return context.diagnosis.curvature !== "none" && ["robust", "industrial", "dpm-experimental"].includes(context.profile); }
98
+ estimateCost(context) { return context.framePixels; }
99
+ async run(frame, context) {
100
+ const estimate = this.estimator.estimate(context);
101
+ const source = asRgba(frame);
102
+ const width = frame.width;
103
+ const height = frame.height;
104
+ const center = (width - 1) / 2;
105
+ const half = Math.max(1, center);
106
+ const forward = (value) => value * (1 - estimate.strength * (1 - value * value));
107
+ const toOriginal = (point) => ({ x: center + forward((point.x - center) / half) * half, y: point.y });
108
+ const fromOriginal = (point) => ({ x: center + inverseCubic((point.x - center) / half, estimate.strength) * half, y: point.y });
109
+ const transformed = curvedRecoveryTransform(toOriginal, fromOriginal);
110
+ const output = new Uint8ClampedArray(source.length);
111
+ for (let y = 0; y < height; y += 1)
112
+ for (let x = 0; x < width; x += 1)
113
+ writeSample(output, (y * width + x) * 4, source, width, height, toOriginal({ x, y }).x, y);
114
+ const candidate = createRecoveryCandidate(frame, this.id, output, width, height, transformed, context.memory, "warp", ["mild-cylindrical-strip-warp", `curvature:${estimate.strength.toFixed(3)}`]);
115
+ candidate.curvature = estimate;
116
+ return [candidate];
117
+ }
118
+ }
119
+ export class SmallModuleRecoveryRoute {
120
+ id = "small-module";
121
+ supports(context) { return context.diagnosis.smallModule !== "none" || (context.diagnosis.evidence.estimatedPixelsPerModule ?? 99) < 5 || context.candidateRegions.some((region) => region.difficultyHints.includes("small-module")); }
122
+ estimateCost(context) { return context.framePixels * 3; }
123
+ async run(frame, context) {
124
+ const pixelsPerModule = context.diagnosis.evidence.estimatedPixelsPerModule ?? 4;
125
+ const factor = Math.max(1.25, Math.min(3, 5 / Math.max(0.5, pixelsPerModule)));
126
+ const full = asRgba(frame);
127
+ const region = estimateInkRegion(full, frame.width, frame.height);
128
+ const cropped = extractRegion(full, frame.width, frame.height, region);
129
+ const cropTransform = affineRecoveryTransform("crop", (point) => ({ x: point.x + region.x, y: point.y + region.y }), (point) => ({ x: point.x - region.x, y: point.y - region.y }));
130
+ const resized = resizeBilinear(cropped, region.width, region.height, factor);
131
+ const transform = composeRecoveryTransforms(resized.transform, cropTransform);
132
+ const results = [createRecoveryCandidate(frame, this.id, unsharpMask(resized.data, resized.width, resized.height, 0.7), resized.width, resized.height, transform, context.memory, "normalized", [`pixels-per-module:${pixelsPerModule.toFixed(2)}`, `ink-crop:${region.width}x${region.height}`, "bounded-bilinear-resize", "selective-sharpen"])];
133
+ if (canAdd(context, results)) {
134
+ const nearest = resizeNearest(cropped, region.width, region.height, factor);
135
+ results.push(createRecoveryCandidate(frame, this.id, nearest.data, nearest.width, nearest.height, composeRecoveryTransforms(nearest.transform, cropTransform), context.memory, "normalized", ["bounded-nearest-resize"]));
136
+ }
137
+ return results;
138
+ }
139
+ }
140
+ export class DamagedRecoveryRoute {
141
+ id = "damaged";
142
+ supports(context) { return context.diagnosis.printingDamage !== "none" || context.diagnosis.occlusion !== "none" || (context.diagnosis.evidence.damageScore ?? 0) > 0.1; }
143
+ estimateCost(context) { return context.framePixels; }
144
+ async run(frame, context) {
145
+ const source = asRgba(frame);
146
+ const results = [createRecoveryCandidate(frame, this.id, morphologicalOpen(source, frame.width, frame.height), frame.width, frame.height, identity(), context.memory, "binary", ["bounded-morphological-open", "light-erosion-repair", "decoder-ecc-left-as-authority"])];
147
+ if (canAdd(context, results))
148
+ results.push(createRecoveryCandidate(frame, this.id, morphologicalClose(source, frame.width, frame.height), frame.width, frame.height, identity(), context.memory, "binary", ["bounded-morphological-close", "dark-contamination-repair", "decoder-ecc-left-as-authority"]));
149
+ return results;
150
+ }
151
+ }
152
+ export class QuietZoneRecoveryRoute {
153
+ id = "quiet-zone";
154
+ supports(context) { return (context.diagnosis.evidence.busyBorderRatio ?? 0) > 0.2 && ["industrial", "dpm-experimental"].includes(context.profile); }
155
+ estimateCost(context) { return context.framePixels; }
156
+ async run(frame, context) {
157
+ const padding = Math.max(4, Math.min(64, Math.round(Math.min(frame.width, frame.height) * 0.12)));
158
+ const result = padNeutral(asRgba(frame), frame.width, frame.height, padding);
159
+ return [createRecoveryCandidate(frame, this.id, result.data, result.width, result.height, result.transform, context.memory, "candidate", ["synthetic-neutral-border", "data-region-unchanged"])];
160
+ }
161
+ }
162
+ export class ScreenRecoveryRoute {
163
+ id = "screen";
164
+ supports(context) { return context.diagnosis.screenMoiré !== undefined && context.diagnosis.screenMoiré !== "none" && ["industrial", "dpm-experimental"].includes(context.profile); }
165
+ estimateCost(context) { return context.framePixels; }
166
+ async run(frame, context) {
167
+ const source = asRgba(frame);
168
+ const smoothed = localContrastNormalize(source, frame.width, frame.height);
169
+ return [createRecoveryCandidate(frame, this.id, adaptiveThreshold(smoothed, frame.width, frame.height, 5, 2), frame.width, frame.height, identity(), context.memory, "binary", ["screen-local-normalization", "bounded-moire-threshold"])];
170
+ }
171
+ }
172
+ export class DpmExperimentalRecoveryRoute {
173
+ id = "dpm";
174
+ supports(context) { return context.dpmExperimentalEnabled && (context.diagnosis.dpmLikelihood ?? 0) >= 0.35; }
175
+ estimateCost(context) { return context.framePixels; }
176
+ async run(frame, context) {
177
+ const gradient = morphologicalGradient(asRgba(frame), frame.width, frame.height);
178
+ return [createRecoveryCandidate(frame, this.id, adaptiveThreshold(gradient, frame.width, frame.height, 4, 1), frame.width, frame.height, identity(), context.memory, "binary", ["experimental-dpm", "morphological-gradient", "bounded-dot-contrast"])];
179
+ }
180
+ }
181
+ export class GeneralRecoveryRoute {
182
+ id = "general";
183
+ supports() { return true; }
184
+ estimateCost(context) { return context.framePixels; }
185
+ async run(frame) { return [originalRecoveryCandidate(frame)]; }
186
+ }
187
+ export function registerDefaultRecoveryRoutes(registry = new RecoveryRouteRegistry()) {
188
+ for (const route of [new LowContrastRecoveryRoute(), new IlluminationRecoveryRoute(), new BlurRecoveryRoute(), new GlareRecoveryRoute(), new PerspectiveRecoveryRoute(), new CurvedRecoveryRoute(), new SmallModuleRecoveryRoute(), new DamagedRecoveryRoute(), new QuietZoneRecoveryRoute(), new ScreenRecoveryRoute(), new DpmExperimentalRecoveryRoute(), new GeneralRecoveryRoute()])
189
+ registry.register(route);
190
+ return registry;
191
+ }
192
+ function identity() { return { kind: "identity", forward: (point) => ({ ...point }), inverse: (point) => ({ ...point }) }; }
193
+ function canAdd(context, results) { return results.length < (context.budget.maximumCandidates ?? context.budget.maximumAttempts); }
194
+ function estimateQuadrilateral(region, score) {
195
+ const skew = Math.min(0.36, Math.max(0.02, score * 0.32));
196
+ const inset = Math.max(1, Math.min(region.width, region.height) * 0.04);
197
+ return [{ x: region.x + inset + region.width * skew, y: region.y + inset }, { x: region.x + region.width - inset - region.width * skew * 0.5, y: region.y + inset * 0.4 }, { x: region.x + region.width - inset - region.width * skew, y: region.y + region.height - inset }, { x: region.x + inset + region.width * skew * 0.5, y: region.y + region.height - inset * 0.4 }];
198
+ }
199
+ function solveHomography(source, destination) {
200
+ const matrix = [];
201
+ const vector = [];
202
+ for (let index = 0; index < 4; index += 1) {
203
+ const { x, y } = source[index];
204
+ const u = destination[index].x;
205
+ const v = destination[index].y;
206
+ matrix.push([x, y, 1, 0, 0, 0, -u * x, -u * y]);
207
+ vector.push(u);
208
+ matrix.push([0, 0, 0, x, y, 1, -v * x, -v * y]);
209
+ vector.push(v);
210
+ }
211
+ const solution = gaussianSolve(matrix, vector);
212
+ return [solution[0], solution[1], solution[2], solution[3], solution[4], solution[5], solution[6], solution[7], 1];
213
+ }
214
+ function gaussianSolve(matrix, vector) {
215
+ const augmented = matrix.map((row, index) => [...row, vector[index]]);
216
+ for (let column = 0; column < 8; column += 1) {
217
+ let pivot = column;
218
+ for (let row = column + 1; row < 8; row += 1)
219
+ if (Math.abs(augmented[row][column]) > Math.abs(augmented[pivot][column]))
220
+ pivot = row;
221
+ if (Math.abs(augmented[pivot][column]) < 1e-9)
222
+ throw new Error("Perspective quadrilateral is degenerate.");
223
+ [augmented[column], augmented[pivot]] = [augmented[pivot], augmented[column]];
224
+ const divisor = augmented[column][column];
225
+ for (let k = column; k <= 8; k += 1)
226
+ augmented[column][k] /= divisor;
227
+ for (let row = 0; row < 8; row += 1)
228
+ if (row !== column) {
229
+ const factor = augmented[row][column];
230
+ for (let k = column; k <= 8; k += 1)
231
+ augmented[row][k] -= factor * augmented[column][k];
232
+ }
233
+ }
234
+ return augmented.map((row) => row[8]);
235
+ }
236
+ function project(matrix, point) { const denominator = matrix[6] * point.x + matrix[7] * point.y + matrix[8]; return { x: (matrix[0] * point.x + matrix[1] * point.y + matrix[2]) / denominator, y: (matrix[3] * point.x + matrix[4] * point.y + matrix[5]) / denominator }; }
237
+ function pointTuple(point) { return [point.x, point.y]; }
238
+ function inverseCubic(target, strength) { let low = -1; let high = 1; for (let iteration = 0; iteration < 16; iteration += 1) {
239
+ const middle = (low + high) / 2;
240
+ const value = middle * (1 - strength * (1 - middle * middle));
241
+ if (value < target)
242
+ low = middle;
243
+ else
244
+ high = middle;
245
+ } return (low + high) / 2; }
246
+ function clampInt(value, minimum, maximum) { return Math.max(minimum, Math.min(maximum, Math.floor(value))); }
247
+ function estimateInkRegion(data, width, height) {
248
+ let left = width;
249
+ let top = height;
250
+ let right = -1;
251
+ let bottom = -1;
252
+ for (let y = 0; y < height; y += 2)
253
+ for (let x = 0; x < width; x += 2) {
254
+ const index = (y * width + x) * 4;
255
+ const luminance = data[index] * 0.2126 + data[index + 1] * 0.7152 + data[index + 2] * 0.0722;
256
+ if (luminance < 180) {
257
+ left = Math.min(left, x);
258
+ top = Math.min(top, y);
259
+ right = Math.max(right, x);
260
+ bottom = Math.max(bottom, y);
261
+ }
262
+ }
263
+ if (right < left || bottom < top)
264
+ return { x: 0, y: 0, width, height };
265
+ const padX = Math.max(2, Math.round((right - left + 1) * 0.12));
266
+ const padY = Math.max(2, Math.round((bottom - top + 1) * 0.12));
267
+ const x = Math.max(0, left - padX);
268
+ const y = Math.max(0, top - padY);
269
+ return { x, y, width: Math.min(width - x, right - left + 1 + padX * 2), height: Math.min(height - y, bottom - top + 1 + padY * 2) };
270
+ }
271
+ function extractRegion(data, width, height, region) {
272
+ const output = new Uint8ClampedArray(region.width * region.height * 4);
273
+ for (let y = 0; y < region.height; y += 1) {
274
+ const sourceStart = ((region.y + y) * width + region.x) * 4;
275
+ output.set(data.subarray(sourceStart, sourceStart + region.width * 4), y * region.width * 4);
276
+ }
277
+ void height;
278
+ return output;
279
+ }
280
+ //# sourceMappingURL=recovery-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery-routes.js","sourceRoot":"","sources":["../../src/industrial/recovery-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { DecodeCandidate, ScanEvidence } from "./types.js";
2
+ export declare function geometryEvidence(candidate: DecodeCandidate): number;
3
+ export declare function buildScanEvidence(candidates: readonly DecodeCandidate[], temporalObservations?: number): ScanEvidence;
4
+ export declare function decodeCandidateFromResult(result: import("../contracts/result.js").ScanResult, route: DecodeCandidate["route"], elapsedMs: number): DecodeCandidate;
5
+ //# sourceMappingURL=scan-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-evidence.d.ts","sourceRoot":"","sources":["../../src/industrial/scan-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEhE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,CASnE;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,SAAS,eAAe,EAAE,EACtC,oBAAoB,SAAI,GACvB,YAAY,CA0Bd;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,wBAAwB,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAoBlK"}