tapirscan 1.2.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +220 -0
- package/README.md +384 -230
- package/dist/browser-worker.d.ts +33 -0
- package/dist/browser-worker.js +83 -0
- package/dist/browser.d.ts +44 -0
- package/dist/browser.js +211 -0
- package/dist/freeze.d.ts +6 -0
- package/dist/freeze.js +7 -0
- package/dist/index.d.ts +30 -18
- package/dist/index.js +138 -87
- package/dist/layout.d.ts +19 -0
- package/dist/layout.js +27 -0
- package/dist/multiformat/format-registry.d.ts +2 -2
- package/dist/multiformat/format-registry.js +12 -11
- package/dist/multiformat/formats.d.ts +2 -0
- package/dist/multiformat/formats.js +13 -6
- package/dist/rust-session.d.ts +2 -2
- package/dist/rust-session.js +16 -6
- package/examples/camera.html +28 -29
- package/examples/vite/README.md +31 -0
- package/examples/vite/index.html +14 -0
- package/examples/vite/main.js +33 -0
- package/examples/vite/package.json +16 -0
- package/examples/vite/vite.config.js +6 -0
- package/package.json +27 -8
- package/wasm/build.json +295 -0
- package/wasm/experimental-turbo16.wasm +0 -0
- package/wasm/experimental-turbo2.wasm +0 -0
- package/wasm/experimental-turbo4.wasm +0 -0
- package/wasm/experimental-turbo8.wasm +0 -0
- package/wasm/high.wasm +0 -0
- package/wasm/low.wasm +0 -0
- package/wasm/medium.wasm +0 -0
- package/wasm/very-high.wasm +0 -0
- package/examples/scan-worker.mjs +0 -20
- package/examples/worker-client.mjs +0 -63
- package/wasm/high-release-1.2.2-public-low-r2.wasm +0 -0
- package/wasm/low-release-1.2.2-public-low-r2.wasm +0 -0
- package/wasm/medium-release-1.2.2-public-low-r2.wasm +0 -0
- package/wasm/very-high-release-1.2.2-public-low-r2.wasm +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Vite example
|
|
2
|
+
|
|
3
|
+
Copy this directory into your application workspace, then run:
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
npm install
|
|
7
|
+
npm run dev
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Choose a barcode photo. `tapirscan/browser` decodes the file and scans it in a
|
|
11
|
+
worker; Vite bundles the worker and WASM files without plugins or copy steps.
|
|
12
|
+
The only configuration is `optimizeDeps.exclude` in `vite.config.js`, which the
|
|
13
|
+
development server needs to serve those files from the package. Retail formats
|
|
14
|
+
are enabled by default.
|
|
15
|
+
|
|
16
|
+
To test a locally built package, install its npm tarball instead of
|
|
17
|
+
the registry dependency before running the example:
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
npm install /absolute/path/to/tapirscan-X.Y.Z.tgz
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Test production hosting, including a subpath:
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
npm run build -- --base=/scanner/
|
|
27
|
+
npm run preview -- --base=/scanner/
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Open `/scanner/` on the preview server. For Svelte and SvelteKit, see the
|
|
31
|
+
[package README](../../README.md#browser-apps-react-and-svelte).
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>Tapirscan with Vite</title>
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<h1>Scan a barcode photo</h1>
|
|
10
|
+
<input type="file" accept="image/*" aria-label="Barcode photo" disabled />
|
|
11
|
+
<pre role="status">Loading scanner…</pre>
|
|
12
|
+
<script type="module" src="/main.js"></script>
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Scanner } from "tapirscan/browser";
|
|
2
|
+
|
|
3
|
+
const input = document.querySelector("input");
|
|
4
|
+
const status = document.querySelector('[role="status"]');
|
|
5
|
+
// Scanning runs in a worker, so the page stays responsive.
|
|
6
|
+
const scanner = new Scanner();
|
|
7
|
+
|
|
8
|
+
scanner.ready.then(
|
|
9
|
+
() => {
|
|
10
|
+
input.disabled = false;
|
|
11
|
+
status.textContent = "Choose a photo.";
|
|
12
|
+
},
|
|
13
|
+
(error) => {
|
|
14
|
+
status.textContent = error.message;
|
|
15
|
+
},
|
|
16
|
+
);
|
|
17
|
+
// Only the latest selection may update the page; scans can finish out of order.
|
|
18
|
+
let latest = 0;
|
|
19
|
+
input.onchange = async () => {
|
|
20
|
+
const file = input.files[0];
|
|
21
|
+
if (!file) return;
|
|
22
|
+
const request = ++latest;
|
|
23
|
+
status.textContent = "Scanning…";
|
|
24
|
+
try {
|
|
25
|
+
const { barcodes } = await scanner.scan(file);
|
|
26
|
+
if (request !== latest) return;
|
|
27
|
+
status.textContent = barcodes.length
|
|
28
|
+
? barcodes.map((barcode) => `${barcode.format} ${barcode.text}`).join("\n")
|
|
29
|
+
: "No barcode found.";
|
|
30
|
+
} catch (error) {
|
|
31
|
+
if (request === latest) status.textContent = error.message;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tapirscan-vite-example",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "vite",
|
|
7
|
+
"build": "vite build",
|
|
8
|
+
"preview": "vite preview"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"tapirscan": "^1.3.0"
|
|
12
|
+
},
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"vite": "^6.3.5"
|
|
15
|
+
}
|
|
16
|
+
}
|
package/package.json
CHANGED
|
@@ -1,29 +1,48 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tapirscan",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Orientation-aware barcode scanning with a Rust/WASM core and four effort modes",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"import": "./dist/index.js"
|
|
10
|
-
}
|
|
10
|
+
},
|
|
11
|
+
"./browser": {
|
|
12
|
+
"types": "./dist/browser.d.ts",
|
|
13
|
+
"import": "./dist/browser.js"
|
|
14
|
+
},
|
|
15
|
+
"./wasm/low.wasm": "./wasm/low.wasm",
|
|
16
|
+
"./wasm/medium.wasm": "./wasm/medium.wasm",
|
|
17
|
+
"./wasm/high.wasm": "./wasm/high.wasm",
|
|
18
|
+
"./wasm/very-high.wasm": "./wasm/very-high.wasm",
|
|
19
|
+
"./wasm/experimental-turbo2.wasm": "./wasm/experimental-turbo2.wasm",
|
|
20
|
+
"./wasm/experimental-turbo4.wasm": "./wasm/experimental-turbo4.wasm",
|
|
21
|
+
"./wasm/experimental-turbo8.wasm": "./wasm/experimental-turbo8.wasm",
|
|
22
|
+
"./wasm/experimental-turbo16.wasm": "./wasm/experimental-turbo16.wasm"
|
|
11
23
|
},
|
|
12
24
|
"files": [
|
|
13
25
|
"dist",
|
|
14
26
|
"examples",
|
|
15
27
|
"THIRD_PARTY_NOTICES.md",
|
|
16
|
-
"wasm/low
|
|
17
|
-
"wasm/medium
|
|
18
|
-
"wasm/high
|
|
19
|
-
"wasm/very-high
|
|
28
|
+
"wasm/low.wasm",
|
|
29
|
+
"wasm/medium.wasm",
|
|
30
|
+
"wasm/high.wasm",
|
|
31
|
+
"wasm/very-high.wasm",
|
|
32
|
+
"wasm/experimental-turbo2.wasm",
|
|
33
|
+
"wasm/experimental-turbo4.wasm",
|
|
34
|
+
"wasm/experimental-turbo8.wasm",
|
|
35
|
+
"wasm/experimental-turbo16.wasm",
|
|
36
|
+
"wasm/build.json"
|
|
20
37
|
],
|
|
21
38
|
"scripts": {
|
|
22
39
|
"build": "node scripts/clean-dist.mjs && tsc -p tsconfig.json",
|
|
23
|
-
"test": "node --test test/scanner.mjs test/shared-retail.mjs && tsc --noEmit --strict --skipLibCheck --target ES2022 --module NodeNext test/api-types.ts",
|
|
40
|
+
"test": "node --test test/camera-example.mjs test/scanner.mjs test/shared-retail.mjs test/loading.mjs test/turbo.mjs test/packaging.mjs && tsc --noEmit --strict --skipLibCheck --target ES2022 --module NodeNext test/api-types.ts",
|
|
41
|
+
"test:browser": "node --test --test-timeout=120000 test/browser.mjs",
|
|
24
42
|
"prepack": "npm run build && node scripts/verify-package.mjs"
|
|
25
43
|
},
|
|
26
44
|
"devDependencies": {
|
|
45
|
+
"playwright-core": "1.63.0",
|
|
27
46
|
"typescript": "5.8.3"
|
|
28
47
|
},
|
|
29
48
|
"keywords": [
|
|
@@ -37,7 +56,7 @@
|
|
|
37
56
|
"engines": {
|
|
38
57
|
"node": ">=20"
|
|
39
58
|
},
|
|
40
|
-
"license": "MIT",
|
|
59
|
+
"license": "MIT OR Apache-2.0",
|
|
41
60
|
"author": "Florian Nick",
|
|
42
61
|
"repository": {
|
|
43
62
|
"type": "git",
|
package/wasm/build.json
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": 2,
|
|
3
|
+
"rustToolchain": "1.91.1",
|
|
4
|
+
"sourceDigest": "874a9b1e4c11042bdf086145dcb98469d7f6bbf4e6166ffc605b913145fa6304",
|
|
5
|
+
"sourceFiles": {
|
|
6
|
+
"bindings/rust/Cargo.lock": "382d94a1feeb3f1b3d9367aa5b302571e19924a0e239e3581651a891135e4594",
|
|
7
|
+
"bindings/rust/Cargo.toml": "7b50b04d67c1b0104971abf102f902a8c1efbec9f73617280fc9a0a1a05aa454",
|
|
8
|
+
"bindings/rust/api/format.rs": "03e81b2ed51508a9ad7fdf95cc6104a91778eb5541db34c807f736ef743c2dc4",
|
|
9
|
+
"bindings/rust/api/lib.rs": "29a7197c65f3c387822efe990ac8e297f8c069d2718177365b66cbccd7a2549d",
|
|
10
|
+
"bindings/rust/api/pixels.rs": "8c7938acec68c80355b752294f89bb1eeb85d8f2493d1fe16bb8b545b96ccac9",
|
|
11
|
+
"bindings/rust/api/timer.rs": "b27954265e72d1749468e3cbf66b71ca88fdf5b409da23767ac254e4317d9127",
|
|
12
|
+
"bindings/rust/api/types.rs": "b12992dd742b97ea936964e084db795099322b17073fb0c3cf24c67cf7919bb9",
|
|
13
|
+
"bindings/rust/examples/scan_raw.rs": "7c11807f396e3a6108bae7435d733b5ae9ef8b0616ed553ec4127876d55f8341",
|
|
14
|
+
"bindings/rust/src/detail.rs": "a9e64993442b4f224ea24eaae3c091398ef00d2972fb3007f77aa1ba060074ab",
|
|
15
|
+
"bindings/rust/src/effort.rs": "61f2511470037a7f55cb6ff3068b4f580ed643832ccc7e560c9efd23488acd85",
|
|
16
|
+
"bindings/rust/src/fast_linear.rs": "fc36d3b9fd457dcae4abce395691f4ad670770403621774e3a8ae66926c56fd5",
|
|
17
|
+
"bindings/rust/src/fast_linear/recovery.rs": "6d060c04cfe42e94d5e80b6f6a11fd93f3109a7b4b433b55ce94db4f4c4d4672",
|
|
18
|
+
"bindings/rust/src/fast_linear/recovery/band_probe_tests.rs": "5504487d173c7d320fb0015078efb78e0e75b1105c516764e96849b82494d2b9",
|
|
19
|
+
"bindings/rust/src/fast_linear/recovery/bridge_tests.rs": "d18f4b969cc5b47fac72f6d4593354d52a7512f796abfaf6bfe49c1bca59ec87",
|
|
20
|
+
"bindings/rust/src/fast_linear/restored_quiet_tests.rs": "1562440e21540f8361eaa20d86e0bcca56e52edba775eb4c772807e170ec6906",
|
|
21
|
+
"bindings/rust/src/fast_linear/source_ean8_tests.rs": "0fdd767c477c66745112ae6723b1f5607604fea66301502299c24f90611f831e",
|
|
22
|
+
"bindings/rust/src/fast_linear/tests.rs": "b9008a57d382102df68634341090bb6560534ef7bf5c6190594b6843c97d92cd",
|
|
23
|
+
"bindings/rust/src/fast_sparse.rs": "8a238da81735f5420cad499f794327ec887a773b94dc472959eb58ba98a31311",
|
|
24
|
+
"bindings/rust/src/format_registry.rs": "e956596a5094917d650b26ab989a913872f44722be3f0998b79047ba401b0a25",
|
|
25
|
+
"bindings/rust/src/formats.rs": "162127303c0b9b44645b87d90fb108ebceed192edf2aa579104d962428880c0a",
|
|
26
|
+
"bindings/rust/src/formats/grayscale_reuse_tests.rs": "786de798c256549b5c87eb007539ffb97b02fb62258f3d77dd5665742e151d6e",
|
|
27
|
+
"bindings/rust/src/formats/result_tests.rs": "66470971c73732a8a85cc749c0f90600ef47f748473cd9de6e695b2dd421c210",
|
|
28
|
+
"bindings/rust/src/geometry.rs": "cec2076a2a9a6025d4e7d8af59e90212b8311cd1e02066c9c9d94b1617453d74",
|
|
29
|
+
"bindings/rust/src/lib.rs": "b37246eeeb6983f3040ed69a071d36ebd11c8f57d1d9b428e89931107a3f1155",
|
|
30
|
+
"bindings/rust/src/linear_duplicates.rs": "adfccdb23ca198ddb82b8b4a08ce43206fb0d0091e6a473848d773d7336676e2",
|
|
31
|
+
"bindings/rust/src/linear_duplicates/area.rs": "a1a6524ea3769a94748a6316c8cea6192d669253d6e0b846f74962235aa5f1f4",
|
|
32
|
+
"bindings/rust/src/linear_duplicates/footprint.rs": "c415c3da026aa96067e3732b5b56cf9a8248ce503c1f44095a68c6de423b7675",
|
|
33
|
+
"bindings/rust/src/linear_duplicates/footprint/display.rs": "3d15484e572a2f1365b867781ee41eaa17eef3029f52350d1ff13ceaf861b171",
|
|
34
|
+
"bindings/rust/src/linear_duplicates/tests.rs": "357c35584385ef8c0a5c057a08fe4f8915ed882a20d683b207b7e92e61c34eca",
|
|
35
|
+
"bindings/rust/src/matrix_frontend.rs": "281f8e962ebe5c544d0710523d913e3bb663c068971f1a7b63edac43af08e115",
|
|
36
|
+
"bindings/rust/src/matrix_grid.rs": "28c3466d620301a9f74c3731c9d655f0460ffef1d3b552ff3f4a0dca5cc3c770",
|
|
37
|
+
"bindings/rust/src/pipeline.rs": "9cd944802e45c298cfe6017362c73cc3620fa5aae83ce790fb490ae0f1f0d102",
|
|
38
|
+
"bindings/rust/src/pipeline/deblur.rs": "bcbf1d198263d3f0d61635536cf6fe74e79f2584614a8c5e61480b5a1fef5976",
|
|
39
|
+
"bindings/rust/src/pipeline/independent_source_rows_tests.rs": "2fe562a90057c917ed8e57a45ca7befd55afd2832e1e4368c8d10999abbf5ed4",
|
|
40
|
+
"bindings/rust/src/pipeline/recovered_source_tests.rs": "8773f5180276dd34ed37d79d86a05c9640ab19dab3b4b328fbc0f5d3b2e2f33d",
|
|
41
|
+
"bindings/rust/src/pipeline/recovery_tests.rs": "788e8e1993575f4e0490e7b2017b97836067c5f380e1a64e009e0da58ff46c1d",
|
|
42
|
+
"bindings/rust/src/pipeline/restoration.rs": "29a316d8cc723948bfe29e3a419a2bd72cf368f3af49952703d917f57cf6600b",
|
|
43
|
+
"bindings/rust/src/pipeline/segment_voting.rs": "697e4ff057f73f132fe7bf5d745a623bd9a9ea1acfc809b582396d0404f92e45",
|
|
44
|
+
"bindings/rust/src/pipeline/source_evidence.rs": "5071aa47313af18b70da7854c43100df6d467a09fb95d325c6f7b439aafdb6b6",
|
|
45
|
+
"bindings/rust/src/pipeline/tests.rs": "b82e1e7af0c74d152869959ec67eb61b90b9680a8307d9bbd026c895f38a9684",
|
|
46
|
+
"bindings/rust/src/read.rs": "2a358a65ff7dc4d5165db3e5b9a835b06297ec2d89c20869f9888c60580311d0",
|
|
47
|
+
"bindings/rust/src/recovery_conflicts.rs": "d2c9ea06b06202fdec45372dfa8286a40f3e8f591c533f9248aa6c12e4e70a8d",
|
|
48
|
+
"bindings/rust/src/result.rs": "f86acfb6fc879ae2cad9888650f032c625f02e1c8a9b90c86d113a5809fa54a2",
|
|
49
|
+
"bindings/rust/src/short_crop.rs": "d2420735119f8f66c514db72599b295099a325337890392b2aec68847d850cd5",
|
|
50
|
+
"bindings/rust/src/signal_recovery.rs": "0a12c219707231dca9ff02d35a2484985cd21b857c10a9ddda240fa404d65db4",
|
|
51
|
+
"bindings/rust/src/timer.rs": "3c1fff0a0c7e4e5595b22721e857632213ecefd240e50332f6e6a9cec6f973ac",
|
|
52
|
+
"bindings/rust/tests/api.rs": "becbeabad623e635a1bbc734f61bae869f86aab259b2187641e6a49a3150cca7",
|
|
53
|
+
"bindings/rust/tests/parity.rs": "bfff70f75f0da7debcf5243b9ac6e6107fab7045956ecc368a491e37580a6027",
|
|
54
|
+
"bindings/wasm/Cargo.toml.in": "5e9b7bdc521717bacb2600c0afc428f359710298914004e0cf961ee0e4b32c18",
|
|
55
|
+
"bindings/wasm/src/lib.rs": "0a654939f1866207a4e04f6e7c5f331113ba54c40baa77ac655b2323641d5b57",
|
|
56
|
+
"config/formats.json": "28331396b0ca925ad5e95d42a51dcaebec173a31cefa17e8514788f741897ee1",
|
|
57
|
+
"config/modes.json": "3c8d83d7cb2db9ce380778b12cc3c04fa297b0fdc1d2ea2d24e29598bc907791",
|
|
58
|
+
"core/Cargo.lock": "15ffd408087f5f1c4a680140b741615968b6a12d51c3e99091b2b0f5ccf1c532",
|
|
59
|
+
"core/Cargo.toml": "ee31ed20e58ad75d8fc83e022918155d4db5b18a63c21c1f26653b1655163d37",
|
|
60
|
+
"core/src/association.rs": "1bb52ff994ece9460832332a6a7295bf4ad96faf838b2104f4d48d153ea9ce3a",
|
|
61
|
+
"core/src/aztec_frontend/center_index.rs": "da62ef62b5b139f0e8f780c069636198c1316a142b9789169f85c8d76ae168ee",
|
|
62
|
+
"core/src/aztec_frontend/curves.rs": "b8d89c932dc801aa3b00dbb266cc18ee6b2c8ca2a4bd699981c4d1a54c5a3e13",
|
|
63
|
+
"core/src/aztec_frontend/decoder.rs": "41d26f15a3657a5585b8092314d9d3670050cab4581156baff2ce7b9255e83d8",
|
|
64
|
+
"core/src/aztec_frontend/geometry.rs": "66419f20aa04b3ea47f19e8d6ad5c70070b26e329a1150a59cea90209b57ec29",
|
|
65
|
+
"core/src/aztec_frontend/mod.rs": "a9bac0888cbd8cb676d2dc92934764f69931bc6f68d09c3d4c3cb6ee6be365b8",
|
|
66
|
+
"core/src/aztec_frontend/refinement.rs": "8d23b557cb20b9c95c60b320ebe2f1f18431025ebae06944d36d0bcd7f42a56e",
|
|
67
|
+
"core/src/bands.rs": "627fd73277267cd6693a54f37c269929dd7017eeabd8c1e59537de654ff1dcd5",
|
|
68
|
+
"core/src/candidate_scanner.rs": "e7f1f2b01c459d7e7180abfd802d355d7fb34a6672bd0ed8e628ae1bb3c7bab7",
|
|
69
|
+
"core/src/candidate_scanner/association.rs": "96df1fede4fae65ec6bb91df9c6f51f82f4792a6938da379bc41ecba6f8f231a",
|
|
70
|
+
"core/src/candidate_scanner/dark_gap_replay_tests.rs": "333db4d195c5f68953da83a9e25c935118e1581d48f52bf93dfb92c16b52abde",
|
|
71
|
+
"core/src/candidate_scanner/decoding.rs": "2eb9acdaf9619011715f6b2596f101a083c4f2dc88e2daaae0eac82eced575af",
|
|
72
|
+
"core/src/candidate_scanner/diagnostic_validation_tests.rs": "7b0f5e17a3df4b65463215b433a7a9b0ea0f7125b68b5be3294667276534f4c2",
|
|
73
|
+
"core/src/candidate_scanner/evidence_span_tests.rs": "7e7d105b5125c8d97119ff5398534210ccd4975e3a106d7e79c6590eaf65da05",
|
|
74
|
+
"core/src/candidate_scanner/folded_boundary_confirmation_tests.rs": "83449d5b70537ae519c4bd6f2d5d77d9aae6b90bfdec16e1be0a789d19eb6e18",
|
|
75
|
+
"core/src/candidate_scanner/forward_blur_region_tests.rs": "cff79de4e87cbf4d1e2c6406a1c5ec96c2a8c99ede6d1c1de753d346fa285d39",
|
|
76
|
+
"core/src/candidate_scanner/interior_bounds_tests.rs": "ce12ec170eb668ae16e11104b90833fc14cdcd991e4dd3c2ee7e00f4015fde3e",
|
|
77
|
+
"core/src/candidate_scanner/low_contrast_signal_tests.rs": "bf0ac275a1589f1a2f369cc8b167cdaf3baaae11d65484f460875fc7774f61c5",
|
|
78
|
+
"core/src/candidate_scanner/lowres_threshold_tests.rs": "8e664c61fc055fd7e90cea9ebc79bd2098fe220f8f0cb13ed47359a09a223130",
|
|
79
|
+
"core/src/candidate_scanner/nearest_lowres_tests.rs": "4ef2870a49691ac86a4cd1178dae828878e74166ddb06c031bdb5f6afc2a2e46",
|
|
80
|
+
"core/src/candidate_scanner/redundant_collection_test.rs": "6d50eaa91dae6a8f549a68834b053d6c812013a6658eda3edc1cd32eeb6999ee",
|
|
81
|
+
"core/src/candidate_scanner/sampling.rs": "10fd4ff7601d1902341a87a158478f0a73860a6bb39017829f84e31d42ab1d94",
|
|
82
|
+
"core/src/candidate_scanner/segment_diagnostic_tests.rs": "dcd62a2995a8bc0c1c7a9ec9bebd58301680bd9261347e9443713c8df389c63e",
|
|
83
|
+
"core/src/candidate_scanner/tests.rs": "eadfc2690fa3bfa80aea74f6c29203d4cb1270dbfadf915a3bcd8eb8b1a40e63",
|
|
84
|
+
"core/src/continuity.rs": "e6692c36cd1d00abbfa8da99e704eb2791403428a812a42d682a672f03a2347b",
|
|
85
|
+
"core/src/contrast.rs": "664b3302a249de18b6270a92b69ad2438517093411167223e215271ee26ab471",
|
|
86
|
+
"core/src/coverage_arithmetic_tests.rs": "3883dc3a3005b1fdce7a0d8855644d69956af2b8b06e03012d3673db88f33170",
|
|
87
|
+
"core/src/ean.rs": "fc121304194ae2856d14fab8248318b49b54e47a1d370e334032c32087472db0",
|
|
88
|
+
"core/src/ean_blur.rs": "0bf19c8431db4a061bc32dd42d7a71477759b340c3467165c57add90fbac4d62",
|
|
89
|
+
"core/src/extrema_runs.rs": "3393c5f0ae0a8ca4123e46b919ada3b66e7b8a63b2a3d83d42b283014be2334c",
|
|
90
|
+
"core/src/fast_profile.rs": "88211abc16afb4e280bf64e5bcb1563d16ba1e9c71e0e8f62e0312de79f0ca6a",
|
|
91
|
+
"core/src/frame.rs": "9ab7b49497384bf9a134de637713e8de7d83a11dc33e8965b0cba34b4af295a8",
|
|
92
|
+
"core/src/frame/conflict.rs": "661f03b43661655406e2e3b723e84bf9ddd033368fba4e550633d188e8675cac",
|
|
93
|
+
"core/src/frame/crossing_identity_tests.rs": "3503de5cccaf8ee475cfd9ebaea3395db1c617ad1eb829d98de6eddfa848449d",
|
|
94
|
+
"core/src/frame/crossing_physical_evidence_tests.rs": "68045ff73a54d6392ebd0e7b9737b65bf6de53abbc98785c7dda4f825d3153c3",
|
|
95
|
+
"core/src/frame/identity.rs": "0d27e246c2c4a9761f3b8cbb7cb3b5106397ed7b04d2b32963a9be74a95946f4",
|
|
96
|
+
"core/src/frame/optional_identity_tests.rs": "c9fef1b29948baaf7d762fa4d7d2d9ad12ad6b92f26542229d729434ac9bc66e",
|
|
97
|
+
"core/src/frame/paired_pixel_tests.rs": "fc9f5e8dd4c1dc09055d13c8afe7f4caefdbe983e4656ffe121d6779aaaa8ac6",
|
|
98
|
+
"core/src/frame/source_conflict_probe_tests.rs": "0a3b0945544807d019fb6d726cc78f6b7e89467e02123a858ed06fac6d97cc51",
|
|
99
|
+
"core/src/frame/tests.rs": "02699ba4e5085e8bdf75cf2198eb19f7df54d470ebe9fbfc5afabb7e2858b371",
|
|
100
|
+
"core/src/geometry.rs": "3ecd3ad79ef8eba5efdf091da1625dbee3a9d5bbacfe7963793d6ad827afee41",
|
|
101
|
+
"core/src/identity.rs": "4224e8721451c1851bb87a580ae6310e4d338818ff25fe835ddbf3fdb638ae7a",
|
|
102
|
+
"core/src/invalid_visual.rs": "fcd5c2e871888f60aca92c67bd824e42468cf9748169734d2383d07d3079e567",
|
|
103
|
+
"core/src/lib.rs": "8e46249a843826a2f43645136215267ad4e11602828c91e76a505203499d0fc5",
|
|
104
|
+
"core/src/local_signal.rs": "ba42f0cddc32a2db280c8db72f9dc8bdaf8f9ac528c55eac7a1f2542cb1ca2e8",
|
|
105
|
+
"core/src/lowres.rs": "9db7b8ffc6e5fef3d477c3ab14dbe105683300d7d31112b4bc2217fdeeec0fed",
|
|
106
|
+
"core/src/lowres/photo.rs": "5d43a1b32469f4352bf7d3f589c571e7b0ae2e2b76721f535c41518edba08366",
|
|
107
|
+
"core/src/multi_profile.rs": "d4019ec58a145618375c2568ccce2532b0dc4613ed6bd6e83c7e713b713ee018",
|
|
108
|
+
"core/src/multi_profile/asymmetric_quiet_tests.rs": "2bbba6c5c34a1949a9c1c58614ac2f04916f14ac20161eea99318cf8db4666f2",
|
|
109
|
+
"core/src/multi_profile/folded_boundary_tests.rs": "91ef3faee05bc425acdbd3ceba9dbdfb7bff064a228d444124d6b9d0cdeab83f",
|
|
110
|
+
"core/src/multi_profile/redundant_exact_tests.rs": "0bfccef607b8dcbf0be64995ffcfd07df142d9585e474b78da463a3794c1655c",
|
|
111
|
+
"core/src/multi_profile/tests.rs": "bd949ed0d57218f53818235988ac57dcdf5436b7927397eda63757ff70ce8adb",
|
|
112
|
+
"core/src/multi_profile/weak_tests.rs": "0c9e36df651dae3705f13f0ae0643951c1a23eb0c989374ef0db6db39f786b88",
|
|
113
|
+
"core/src/multi_scan.rs": "bdb7359f54cc9018a0b43b05dc21e2ce83a1d1c6e857ff0692dc07f600fce960",
|
|
114
|
+
"core/src/multi_scan/execution.rs": "f6c0f9e9008515b08750a51dfd75f8bea078152ab046a83bcafb680910afb1c2",
|
|
115
|
+
"core/src/multi_scan/plan.rs": "68fb8ded85035b7543ca1d2ab407a823831849279a64b293e5c6d88522f47335",
|
|
116
|
+
"core/src/numeric.rs": "683a108ec8483661cfdef39b570f280ec373d29e384ccd40229e62b658b7346c",
|
|
117
|
+
"core/src/oriented.rs": "a197622f5833d91324c827bd5dcd084f35ea34ea39ae446c7cda2a7ac10bd152",
|
|
118
|
+
"core/src/profile.rs": "0f9b1268ddee001d4960e79a4155063bef867e65fa13867a389adc5f639027e9",
|
|
119
|
+
"core/src/qr_frontend/binarization.rs": "a707d890bf37d6a8afc35a92c7947e29ce0bdb47128cc5046fe13d83104b292b",
|
|
120
|
+
"core/src/qr_frontend/component_geometry.rs": "3c999da2e3e67cb3f7e23304ffa7ff32e4764dce69c4bc6ba27ef13ca1b7e185",
|
|
121
|
+
"core/src/qr_frontend/dm_detect.rs": "a3b7ae82bc8d049ad6580db07f9cbc755507af119eb15616cd0489eba71a434c",
|
|
122
|
+
"core/src/qr_frontend/mod.rs": "229add071e60424bfcc633611f47ffb8f5e246f2430f8a9484810af893631a32",
|
|
123
|
+
"core/src/qr_frontend/qr_detect.rs": "b88ee9663f371b6488b152aefe2a4b43ae90ff38ea73329fafd31f6aaa5c04e8",
|
|
124
|
+
"core/src/qr_frontend/qr_detect/alignment_cached.rs": "ecf8c64aa10a30f74af465f0aafe36da8dee687684bdbeb1c39f54d22d37a6a0",
|
|
125
|
+
"core/src/qr_frontend/qr_detect/curved.rs": "4bcf97aba089dfa3f114d38fe635ccc3b1cd043328d7f0ec5cd68be6a7614909",
|
|
126
|
+
"core/src/qr_frontend/qr_detect/finder_index.rs": "4e0807d84a6c9a58c56d0910b6ed9830e1dbd27bc703eb4c4b89396dda48ca8a",
|
|
127
|
+
"core/src/qr_frontend/qr_detect/partial.rs": "4adeef4317f05bac32bae7845abea11316a61db0ce1ae1885a9568281d141382",
|
|
128
|
+
"core/src/qr_frontend/qr_detect/ring.rs": "72d8af532c8ca3dc6365aa731a6432293f1d22595cfc0bf3f28231c8375cabee",
|
|
129
|
+
"core/src/qr_frontend/qr_detect/single.rs": "c1db0c9d1338d8c79170ed89c27ac9cddf3d8ed93499d752c14670752c43903e",
|
|
130
|
+
"core/src/qr_frontend/qr_enhance.rs": "4c8c61f309c61aa45929be12eea9ba605e9a7989892aa4aa631feff942ba841f",
|
|
131
|
+
"core/src/qr_grid.rs": "e537d7563b54962599ce69a538dccc6f0ef5f6e8b13434a62a78b8ae9c0b0b62",
|
|
132
|
+
"core/src/region_json.rs": "a9d71637e3af7e69e5e7c58e38aba7bfe9bc456b26ad644edb4bf523337dcd98",
|
|
133
|
+
"core/src/region_scan.rs": "4397270adb57b463f653533fc946872da281e9384431efba1bb7805e8bbda249",
|
|
134
|
+
"core/src/retail_anchors.rs": "9fd0155ea56a8b5f419a26afd7e44031c079b1132374c9b1120384395b5a73fc",
|
|
135
|
+
"core/src/retail_peak_scratch.rs": "77f668cc39b41232d32f9c092c8249323da3a1ad48b8fb978459e19c35dd6d13",
|
|
136
|
+
"core/src/retail_peaks.rs": "2e24e066abb4e96b3ebcc088418b9dc51068f18df3e63475dce089ac0c13ab1a",
|
|
137
|
+
"core/src/retail_pipeline.rs": "98d21798d173812dcb9456241549570170fefafee6d05a1671430b40d642389a",
|
|
138
|
+
"core/src/retail_protection.rs": "5aee4e1153a713b619e55dd15c30b5cac80db355e88fdf9a423a51f85192f037",
|
|
139
|
+
"core/src/retail_roi.rs": "9f073d79a0899f846ca450c872383335b163cef3affed0ad3a0b8649cfec1c35",
|
|
140
|
+
"core/src/retail_short.rs": "9287a52900cd6876a5ac13a7a5116c3d9d1dff0143417d11b5b0a28de4598ab6",
|
|
141
|
+
"core/src/run_ean.rs": "0a4186cbe7ec297722d8efdc746ca7a29a0090b62d6a96ace4dfaf5a148f7ede",
|
|
142
|
+
"core/src/run_profile.rs": "5056f889336f57121ebb2936b3744093574f2532c3ff46a79522a0a363517e6c",
|
|
143
|
+
"core/src/sampling.rs": "2b05686ae0894668918e43a92d6b39bd183ea271117e220167f6f4ae3b0938d6",
|
|
144
|
+
"core/src/scan.rs": "2dafbd798135b30aa8d7b84b221b71148c00c069a5895dbaeb7f187e4db045bb",
|
|
145
|
+
"core/src/scanner_clock.rs": "22195a922b297d967ed7c20738fd2cd89bbb00f74fc88a17cdde85957d575976",
|
|
146
|
+
"core/src/shear.rs": "65c7d1ba7e1c58392cf0c32e67badf03af786c845b41921ccc67b6236a3b472e",
|
|
147
|
+
"core/src/source_rescue.rs": "1aa4c8788d967312ca0dbaf1755880f32c5db46f9fb3e908dee53035312ae72d",
|
|
148
|
+
"core/src/stripes.rs": "58a3fad86d12ea9cda07ca254b4d7b906deb918074565306d35c27f70875eb71",
|
|
149
|
+
"core/src/stripes/groups.rs": "ba4215e5d44b78aed4153903b0095d4d0733a8a04a33cd0a17f398d64cfdbc12",
|
|
150
|
+
"core/src/stripes/proposals.rs": "636a5f65814b90671175c7889180d6e3d67f53b38ef7153a23c54a5b3604c81c",
|
|
151
|
+
"core/src/stripes/quick.rs": "fb43b4baed4e8a6d13ed558b92a0ab888125d65159018f40695411f073f0d35f",
|
|
152
|
+
"core/src/stripes/raster.rs": "cf09ce3c1048fa05e5916617cfa657d2fc476910cf361e32408ef9bf647db1b1",
|
|
153
|
+
"core/src/stripes/refinement.rs": "b5033fcc4e86f4a19a15eeb8e777335a042686c9115461300ae71259d4f7507e",
|
|
154
|
+
"core/src/subpixel.rs": "b5b5679b25f678e3b4e73ca857e152dbdc21640c42a406cd7ca44d1ee3f3b25d",
|
|
155
|
+
"core/src/subpixel/model.rs": "7a5b696450b7fd60d3163f9c75eec24f3fc1c668fbe9273f8050a4eb0b93e5bc",
|
|
156
|
+
"core/src/subpixel/sequence.rs": "d55cb16e74f2d8016c0c9ca97ad481a8d3069af3407efecb1868bc8df776b8a4",
|
|
157
|
+
"core/src/transition.rs": "68f44c9dd45d9b2de411ac25757bb974eace9c2933ca949695e3b333b40d1f0a",
|
|
158
|
+
"core/src/verified_coverage.rs": "e0d5a059e1520aae5e6a30df6a78e61db5dd9f659dbeac4c75416fbeb002e788",
|
|
159
|
+
"multiformat/Cargo.lock": "df2ac9308658ddd8c8b2a464f281c99cf133e94406a04c0286cbe4011ae4889e",
|
|
160
|
+
"multiformat/Cargo.toml": "322c2664cf79929ec201ab7cca6101f74add778932d56d3f0149a18ec78ccb2d",
|
|
161
|
+
"multiformat/src/aztec.rs": "7be10cbc7cdf9e984985f5261fa2f5d34d1c7209f9a19e908a60f383653a31a6",
|
|
162
|
+
"multiformat/src/aztec_detect.rs": "0a3074bcbf509d4e89b9faa168909cbe9efbb47980e63203d03028f62748d8ac",
|
|
163
|
+
"multiformat/src/aztec_detect/center_index.rs": "816d3fbdf87c8abdb47ac989c96ce47183531d07a4b4bc53be9e488a71455af8",
|
|
164
|
+
"multiformat/src/bin/finders.rs": "77a5081a20324af6e8c019c4acc714f9d88790d5218c078f7883bb9a8be4cdbc",
|
|
165
|
+
"multiformat/src/bin/matrix.rs": "51f45074f194f75f3f105e4688e17f1e44bf5661b75c78e6917ddcbf35bf5e1a",
|
|
166
|
+
"multiformat/src/bin/oracle.rs": "4b3c7330d0b6c8aec1e843d72587ac1e7df4564b0d36b29e26a08ce2ac76872a",
|
|
167
|
+
"multiformat/src/bin/pdf_probe.rs": "37f65b766c21e5be8298b1f40f08ef48dcf53ea2e9187ec265f1ab5d1dad8f92",
|
|
168
|
+
"multiformat/src/bin/scan.rs": "66a2476d11e25e2c9de39dc89f98033637d1caf614d83079556b22cd79f260fe",
|
|
169
|
+
"multiformat/src/binarization.rs": "f76f699782f0281cb2b374c88bc65b75c74f29cd2681edf2744c927519a0195c",
|
|
170
|
+
"multiformat/src/component_geometry.rs": "1dc761a26c8ae7f02f99992ff0f03e8b7206ac8d445f917e7a92bb6c5a0f26ca",
|
|
171
|
+
"multiformat/src/databar.rs": "e3ad35e28983ba5be48c66f0f6e448f861968b7b80c86754c0b440d31aa64ebe",
|
|
172
|
+
"multiformat/src/datamatrix.rs": "82667d9e6f400e08fb73c2d11edbc326d14685341a4928f49cafb89f9be36294",
|
|
173
|
+
"multiformat/src/dm_detect.rs": "894b311d80d3a133f08eba5c3fc2fdfb39a6c16557551d021855c397a12fe9e3",
|
|
174
|
+
"multiformat/src/encoding.rs": "3ef802254b637c2b62df99171a540d6cb04ff2c8a0b233b1a18eb3b48ae2e192",
|
|
175
|
+
"multiformat/src/encoding_tables.rs": "17162b094e106b6f175d021e74de97daa64fc6b0fcef26f74195af58ffcdce5a",
|
|
176
|
+
"multiformat/src/expanded.rs": "75749adff31553818a1e8458e8da8ba809eadca4d39dd85e5a1cfeffbb4bf9fd",
|
|
177
|
+
"multiformat/src/lib.rs": "cbcd465150b30e295916efc680a317ddeca3ae524c64751bf5a57c9a28f335de",
|
|
178
|
+
"multiformat/src/linear.rs": "7eb68cfa1e6681f2e161259c9266b425237b0c821405206ecbd99a2f7477ffb8",
|
|
179
|
+
"multiformat/src/linear_geometry.rs": "fc22d47e5c8bbf9c72c5f23ee00ffb9cacd5f0504699c226622a8123c2d6660b",
|
|
180
|
+
"multiformat/src/maxicode.rs": "ea033b3e75db3b61b19ab9c3cf3f7019e7adbce99eb8d57979eb9d4f90825c15",
|
|
181
|
+
"multiformat/src/maxicode_detect.rs": "eecd4c109a58d84956570b35668b319de41e7e31a91425fde8453c22d4227d47",
|
|
182
|
+
"multiformat/src/maxicode_tables.rs": "41a539bce7e5731a343f5a582d323bd3dc320fdb17150b638a422fc58899ea0d",
|
|
183
|
+
"multiformat/src/numeric.rs": "eae0ecb1290b9f08aa6aef9e147d85ffa2a69b79aa9d31269b4a9e9c3a82eec8",
|
|
184
|
+
"multiformat/src/pdf417.rs": "a2df2217f5cc461fe2e47723d88085e77993ba6f2d03b6cc85517d0eda4deaa0",
|
|
185
|
+
"multiformat/src/pdf417_tables.rs": "692e75fc7563d5dae6c1691d3112b2928f900a0c97a091f6db2b969fd914d737",
|
|
186
|
+
"multiformat/src/pdf_localize.rs": "8b718bb445ae1b7740ee62604e496bffff7a80965b9b7f51872447fde11d5a3a",
|
|
187
|
+
"multiformat/src/qr.rs": "c4fb2b55936b7c6d42f550b3ee902c66628a0224a1c8f82329eb74aa7797cb9f",
|
|
188
|
+
"multiformat/src/qr_detect.rs": "7a23cdf55ae022ed99d3d556422a9479b1cfe173f0cc774ad27afe6159aae7a5",
|
|
189
|
+
"multiformat/src/qr_detect/curved.rs": "046820f490d19b7735e89ee5a3b3db7e1450c7e9462e9227665595b684e6c1b2",
|
|
190
|
+
"multiformat/src/qr_detect/finder_index.rs": "4e0807d84a6c9a58c56d0910b6ed9830e1dbd27bc703eb4c4b89396dda48ca8a",
|
|
191
|
+
"multiformat/src/qr_detect/partial.rs": "ebc5fa95b0f85aa4a6bcf14bf645971b5b66f143f1790b2069fdb68992f176ef",
|
|
192
|
+
"multiformat/src/qr_detect/ring.rs": "72d8af532c8ca3dc6365aa731a6432293f1d22595cfc0bf3f28231c8375cabee",
|
|
193
|
+
"multiformat/src/qr_detect/single.rs": "8505b41b38c06531a082ca5401678743672b3745ae76ba8a7960920ad2842f86",
|
|
194
|
+
"multiformat/src/qr_enhance.rs": "4c8c61f309c61aa45929be12eea9ba605e9a7989892aa4aa631feff942ba841f",
|
|
195
|
+
"multiformat/src/qr_tables.rs": "50cb91143498ac7b06aae9eb60ac85ce3144ab8a19f8c38d32805b8434c3407b",
|
|
196
|
+
"multiformat/src/rectify.rs": "619d8302452db8224e48b23ec80e344e96787edea6b96aa2b217e8ad18eee49a",
|
|
197
|
+
"multiformat/src/reed_binary.rs": "f45f5925b646b554f881294800fc31f8b59d3caa80ef89170c2df8f01dceafe7",
|
|
198
|
+
"multiformat/src/reed_prime.rs": "df5a08883e0e186c3458174e2c3c2b84f20985dafeb99118a5c179a4be3eda5a",
|
|
199
|
+
"multiformat/src/reed_solomon.rs": "a024d683b542308d475f1c6ef6b32977e987079b05444cb940cfab361fb1991f",
|
|
200
|
+
"multiformat/src/regions.rs": "e00a40a616b4ab813e4cacbe9f5f8c9c79a20ff45fd3833215a5061d5a6dfe22",
|
|
201
|
+
"multiformat/src/retail_gray.rs": "186c34273643914a2947b79220c6b63cf25cf8ac1446fa959a1346cb8dc65c9e",
|
|
202
|
+
"multiformat/src/retail_profile.rs": "af85e22f4828802bab84f33256cc07ecba841f2a9435406de20225274082051c",
|
|
203
|
+
"scripts/build.py": "e16fe0ffdbf68c590a1b03d22562aa40b075bedc82570b886d670d9ea0de7475",
|
|
204
|
+
"scripts/build_turbo.py": "cdf932e08ad2e401fd64d950eb522cb5d8692c5673cf631ffba4aeaf0285d4f8",
|
|
205
|
+
"scripts/build_wasm.py": "3b129ebd69ea05e05d4642bde43881b16ccc50ed36d0b55c3025be2afb49738e",
|
|
206
|
+
"scripts/prepare_rust.py": "0a102eec86e2ed58a4dd7b9e884526828936cba4b65aa55b4db138c8799db907",
|
|
207
|
+
"scripts/wasm_rustc.py": "2a775dbb3cdc5d886f510dfc2f60a8035932aace6503758ad17b196d5714f335",
|
|
208
|
+
"tools/package-source/Cargo.lock": "b869f3edae87ac8e4652d1ef1d01a70c8d6694c80c03cf82f8f52a21c12847cf",
|
|
209
|
+
"tools/package-source/Cargo.toml": "565ad3a7ce72b4cea33a0468de1192efff8e1b3c0b5a632d17d1c4faedfd3ed1",
|
|
210
|
+
"tools/package-source/src/main.rs": "e41bcb2e036a6b754bc84a483c72497ed2e22cee338d9f813bc63ab7120419d5"
|
|
211
|
+
},
|
|
212
|
+
"files": {
|
|
213
|
+
"experimental-turbo16.wasm": {
|
|
214
|
+
"mode": "low",
|
|
215
|
+
"preset": 16,
|
|
216
|
+
"environment": {
|
|
217
|
+
"TAPIRSCAN_EXPERIMENTAL_TURBO": "1",
|
|
218
|
+
"TAPIRSCAN_TURBO_TIER": "16",
|
|
219
|
+
"TAPIRSCAN_TURBO_LEGACY_OUTLINES": "1",
|
|
220
|
+
"TAPIRSCAN_TURBO_BAND_OUTLINES": "1",
|
|
221
|
+
"TAPIRSCAN_EXPERIMENT_TILE_CACHE": "1",
|
|
222
|
+
"TAPIRSCAN_TURBO_FINITE_EXTREMA": "1",
|
|
223
|
+
"TAPIRSCAN_TURBO_DIRECT_SAMPLE": "1"
|
|
224
|
+
},
|
|
225
|
+
"sha256": "5a3ee3af81ed164df64deb763dce042d82df1ab80aa5ea4a802e4608b618bf04",
|
|
226
|
+
"bytes": 1789882
|
|
227
|
+
},
|
|
228
|
+
"experimental-turbo2.wasm": {
|
|
229
|
+
"mode": "low",
|
|
230
|
+
"preset": 2,
|
|
231
|
+
"environment": {
|
|
232
|
+
"TAPIRSCAN_EXPERIMENTAL_TURBO": "1",
|
|
233
|
+
"TAPIRSCAN_TURBO_TIER": "2",
|
|
234
|
+
"TAPIRSCAN_TURBO_LEGACY_OUTLINES": "1",
|
|
235
|
+
"TAPIRSCAN_TURBO_BAND_OUTLINES": "1",
|
|
236
|
+
"TAPIRSCAN_EXPERIMENT_TILE_CACHE": "1",
|
|
237
|
+
"TAPIRSCAN_TURBO_FINITE_EXTREMA": "1",
|
|
238
|
+
"TAPIRSCAN_TURBO_SELECTIVE_OUTLINES": "1"
|
|
239
|
+
},
|
|
240
|
+
"sha256": "ac2f79fd382172b14ce3a60234f25ed36f929942d81b747ba1149ce5c1ed4198",
|
|
241
|
+
"bytes": 1801556
|
|
242
|
+
},
|
|
243
|
+
"experimental-turbo4.wasm": {
|
|
244
|
+
"mode": "low",
|
|
245
|
+
"preset": 4,
|
|
246
|
+
"environment": {
|
|
247
|
+
"TAPIRSCAN_EXPERIMENTAL_TURBO": "1",
|
|
248
|
+
"TAPIRSCAN_TURBO_TIER": "4",
|
|
249
|
+
"TAPIRSCAN_TURBO_LEGACY_OUTLINES": "1",
|
|
250
|
+
"TAPIRSCAN_TURBO_BAND_OUTLINES": "1",
|
|
251
|
+
"TAPIRSCAN_EXPERIMENT_TILE_CACHE": "1",
|
|
252
|
+
"TAPIRSCAN_TURBO_FINITE_EXTREMA": "1",
|
|
253
|
+
"TAPIRSCAN_TURBO_SELECTIVE_OUTLINES": "1"
|
|
254
|
+
},
|
|
255
|
+
"sha256": "18c939330be27b8f363fe9c60a3971cdbff5fb7210f52618187c133b3d93229d",
|
|
256
|
+
"bytes": 1796481
|
|
257
|
+
},
|
|
258
|
+
"experimental-turbo8.wasm": {
|
|
259
|
+
"mode": "low",
|
|
260
|
+
"preset": 8,
|
|
261
|
+
"environment": {
|
|
262
|
+
"TAPIRSCAN_EXPERIMENTAL_TURBO": "1",
|
|
263
|
+
"TAPIRSCAN_TURBO_TIER": "8",
|
|
264
|
+
"TAPIRSCAN_TURBO_LEGACY_OUTLINES": "1",
|
|
265
|
+
"TAPIRSCAN_TURBO_BAND_OUTLINES": "1",
|
|
266
|
+
"TAPIRSCAN_EXPERIMENT_TILE_CACHE": "1",
|
|
267
|
+
"TAPIRSCAN_TURBO_FINITE_EXTREMA": "1",
|
|
268
|
+
"TAPIRSCAN_TURBO_SELECTIVE_OUTLINES": "1",
|
|
269
|
+
"TAPIRSCAN_TURBO_PROFILE_CAP": "576"
|
|
270
|
+
},
|
|
271
|
+
"sha256": "d05a0a454bb8921261b60d413d1d6cac0e67a438d797438d33cc02def4705a6b",
|
|
272
|
+
"bytes": 1794556
|
|
273
|
+
},
|
|
274
|
+
"high.wasm": {
|
|
275
|
+
"mode": "high",
|
|
276
|
+
"sha256": "0eb910a865e2fd526fd235f94d58c7df7701a9c583f2a3f938e8d77a93349313",
|
|
277
|
+
"bytes": 2414659
|
|
278
|
+
},
|
|
279
|
+
"low.wasm": {
|
|
280
|
+
"mode": "low",
|
|
281
|
+
"sha256": "57d6bc21ddacd4d47feddc44aeaae1e58e269069eb5eaa746020e6eec49c64b2",
|
|
282
|
+
"bytes": 1841468
|
|
283
|
+
},
|
|
284
|
+
"medium.wasm": {
|
|
285
|
+
"mode": "medium",
|
|
286
|
+
"sha256": "537c49059c2289f7e07d25cb9bc3c290dee1a3510d2f2b9c031c4c46a582f0d3",
|
|
287
|
+
"bytes": 2450297
|
|
288
|
+
},
|
|
289
|
+
"very-high.wasm": {
|
|
290
|
+
"mode": "very-high",
|
|
291
|
+
"sha256": "8dc4622da970c340e6b7d815083c253ba10d7f56437721b086a38caaca922b39",
|
|
292
|
+
"bytes": 2501485
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/wasm/high.wasm
ADDED
|
Binary file
|
package/wasm/low.wasm
ADDED
|
Binary file
|
package/wasm/medium.wasm
ADDED
|
Binary file
|
|
Binary file
|
package/examples/scan-worker.mjs
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
// Serve this directory alongside ../dist and ../wasm, or adapt the import for your bundler.
|
|
2
|
-
import { Scanner } from "../dist/index.js";
|
|
3
|
-
|
|
4
|
-
let scanner;
|
|
5
|
-
self.onmessage = async ({ data: { id, type, options, image } }) => {
|
|
6
|
-
try {
|
|
7
|
-
if (type === "init") {
|
|
8
|
-
if (scanner) throw Error("Scanner already initialized");
|
|
9
|
-
scanner = await Scanner.create(options);
|
|
10
|
-
self.postMessage({ id });
|
|
11
|
-
} else if (type === "scan") {
|
|
12
|
-
if (!scanner) throw Error("Scanner not initialized");
|
|
13
|
-
self.postMessage({ id, result: scanner.scan(image, options) });
|
|
14
|
-
} else {
|
|
15
|
-
throw Error(`Unknown worker request: ${type}`);
|
|
16
|
-
}
|
|
17
|
-
} catch (error) {
|
|
18
|
-
self.postMessage({ id, error: { message: error.message, code: error.code } });
|
|
19
|
-
}
|
|
20
|
-
};
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/** Initialize once. scan() transfers ownership of the supplied pixel buffer.
|
|
2
|
-
* Await each scan before capturing the next frame; dispose() stops the worker.
|
|
3
|
-
* Structured cloning yields independent mutable results on the receiving side.
|
|
4
|
-
*/
|
|
5
|
-
export async function createScannerWorker(options = {}) {
|
|
6
|
-
const worker = new Worker(new URL("./scan-worker.mjs", import.meta.url), { type: "module" });
|
|
7
|
-
let pending;
|
|
8
|
-
let nextId = 0;
|
|
9
|
-
let closed = false;
|
|
10
|
-
function dispose(reason = Error("Scanner worker disposed")) {
|
|
11
|
-
if (closed) return;
|
|
12
|
-
closed = true;
|
|
13
|
-
worker.terminate();
|
|
14
|
-
pending?.reject(reason);
|
|
15
|
-
pending = undefined;
|
|
16
|
-
}
|
|
17
|
-
worker.onerror = (event) => dispose(Error(event.message || "Scanner worker failed"));
|
|
18
|
-
worker.onmessageerror = () => dispose(Error("Could not deserialize scanner result"));
|
|
19
|
-
worker.onmessage = ({ data }) => {
|
|
20
|
-
if (!pending || pending.id !== data.id) return;
|
|
21
|
-
const { resolve, reject } = pending;
|
|
22
|
-
pending = undefined;
|
|
23
|
-
if (data.error) reject(Object.assign(Error(data.error.message), { code: data.error.code }));
|
|
24
|
-
else resolve(data.result);
|
|
25
|
-
};
|
|
26
|
-
function request(type, message, transfer = []) {
|
|
27
|
-
if (closed) return Promise.reject(Error("Scanner worker disposed"));
|
|
28
|
-
if (pending)
|
|
29
|
-
return Promise.reject(Error("Await the previous scan before sending another frame"));
|
|
30
|
-
return new Promise((resolve, reject) => {
|
|
31
|
-
const id = nextId++;
|
|
32
|
-
pending = { id, resolve, reject };
|
|
33
|
-
try {
|
|
34
|
-
worker.postMessage({ id, type, ...message }, transfer);
|
|
35
|
-
} catch (error) {
|
|
36
|
-
pending = undefined;
|
|
37
|
-
reject(error);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
try {
|
|
42
|
-
await request("init", { options });
|
|
43
|
-
} catch (error) {
|
|
44
|
-
dispose(error);
|
|
45
|
-
throw error;
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
scan(image, options = {}) {
|
|
49
|
-
// Send explicit storage settings; ImageData's prototype is not required in the worker.
|
|
50
|
-
const pixels = {
|
|
51
|
-
data: image.data,
|
|
52
|
-
width: image.width,
|
|
53
|
-
height: image.height,
|
|
54
|
-
channels: image.channels ?? 4,
|
|
55
|
-
stride: image.stride,
|
|
56
|
-
};
|
|
57
|
-
return request("scan", { image: pixels, options }, [image.data.buffer]);
|
|
58
|
-
},
|
|
59
|
-
dispose() {
|
|
60
|
-
dispose();
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|