@mauriciobenjamin700/ort-vision-sdk-web 0.7.1 → 0.8.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/CHANGELOG.md CHANGED
@@ -7,6 +7,91 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.8.0] - 2026-09-04
11
+
12
+ ### Changed
13
+
14
+ - **`Classifier` no longer applies a second softmax to a probability vector.**
15
+ `applySoftmax` defaulted to `true`, but every Ultralytics classification export
16
+ ends in a `Softmax` node, so the task was softmaxing an already-normalized
17
+ vector. It is monotonic, which is why it survived: top-1 is unchanged and every
18
+ confidence attached to it is wrong. Measured in the Python SDK against
19
+ Ultralytics' own pipeline over the same file, the maximum absolute probability
20
+ error went from `7.6e-07` to `0.82`.
21
+
22
+ It now defaults to undefined, which reads the model's metadata and answers
23
+ `false` for that family; passing a boolean still overrides.
24
+ `classifier.appliesSoftmax` reports the choice.
25
+
26
+ - **`Classifier` picks its normalization from the model.** The default was the
27
+ ImageNet mean and deviation for everybody, which is right for a
28
+ torchvision-style model and wrong for an Ultralytics one — its classification
29
+ head consumes raw `[0, 1]`. Loading a `YOLO(...).export(format="onnx")`
30
+ classifier with the old default fed it a tensor it never saw in training, and
31
+ nothing said so: no exception, no warning, a prediction of exactly the right
32
+ shape that is simply worse.
33
+
34
+ The answer was already in the file — every Ultralytics export stamps
35
+ `author: Ultralytics` and `task: classify` into its metadata, the same block
36
+ the class names already came from. The new `normalization` option defaults to
37
+ `"auto"`, which reads it and picks: `"ultralytics"` (identity) for that export,
38
+ `"imagenet"` for anything else. `"imagenet"`, `"ultralytics"` and `"none"` name
39
+ the presets explicitly, `mean`/`std` still override, and passing both throws
40
+ `RangeError` rather than silently preferring one. Supplying only one of
41
+ `mean`/`std` now leaves the other at the preset value.
42
+ `classifier.normalization` reports what is in effect.
43
+
44
+ **This changes what an Ultralytics classifier is fed when loaded with the
45
+ defaults.** Those models were being run degraded, so the change corrects them
46
+ rather than breaking them.
47
+
48
+ Mirrors the same change in `ort-vision-sdk` 0.9.0 (Python), including the
49
+ build-time `fuse_detect_classify`.
50
+
51
+ ### Fixed
52
+
53
+ - **A session asking only for `webgpu` on a device without it now runs, instead
54
+ of failing to load.** Capability detection can rule out every requested
55
+ provider, and handing ORT the unsatisfiable list makes `InferenceSession.create`
56
+ reject with `no available backend found` — the page gets no inference at all
57
+ rather than the slow-but-working fallback. The effective list now floors at
58
+ `wasm`, which ORT-Web can always run, and the warning names it instead of
59
+ claiming the session will run on `[]`. Found in a real Chromium, where
60
+ `navigator.gpu` exists but yields no adapter; no amount of stubbed
61
+ `navigator` in the unit tests reproduced it.
62
+
63
+ - **`OrtSession.providers` no longer names a provider this browser cannot run.**
64
+ It held the result of `resolveProviders(...)` — the list that was *asked for* —
65
+ and ORT-Web falls back in silence, so a page requesting `webgpu` on a device
66
+ without it ran on WASM several times slower with nothing in the console.
67
+
68
+ ORT-Web exposes no equivalent of Node's `getProviders()`, so the effective
69
+ provider cannot be read back. What the browser does answer is whether the
70
+ underlying API exists at all, and the new `detectProviders` uses that:
71
+ `webgpu` survives only where `navigator.gpu` returns an adapter, `webnn` only
72
+ where `navigator.ml` exists, and anything untestable is kept rather than
73
+ guessed away. `providers` now reports that narrowed list — best-effort, so an
74
+ entry means "not ruled out", not "confirmed" — and the requested list is
75
+ preserved as the new `requestedProviders`. Naming a provider explicitly and
76
+ not getting it emits a `console.warn`; the default list falling back stays
77
+ quiet, which is what it is for.
78
+
79
+ Mirrors the same fix in `ort-vision-sdk` 0.9.0 (Python), where ORT does report
80
+ the effective list and it is read back directly.
81
+
82
+ - **The changelog's link table is no longer stuck at 0.7.0.** `[Unreleased]`
83
+ compared against `web-v0.7.0`, so the shipped 0.7.1 read as unreleased work,
84
+ and `[0.7.1]` had no link definition at all — it rendered as literal text.
85
+
86
+ ### Documentation
87
+
88
+ - **`OUTPUT_BOXES` states which box a fused pipeline reports.** A file fused by
89
+ `ort-vision-sdk` 0.9.0 or later reports the box that was actually classified,
90
+ clamped to the image the crop came from; older files report the raw box, which
91
+ draws a rectangle wider than the region the classifier saw. No runtime change
92
+ on this side — the semantics live in the graph — but consumers drawing that
93
+ rectangle need to know which file they have.
94
+
10
95
  ## [0.7.1] - 2026-08-14
11
96
 
12
97
  ### Fixed
@@ -535,7 +620,9 @@ console.log(r.boxes.xyxy, r.boxes.cls, r.boxes.conf, r.names);
535
620
  - Execution-provider resolution defaulting to `["webgpu", "wasm"]`.
536
621
  - Public types mirroring the Python SDK: `BoundingBox`, `ClassProbability`, `ClassificationResult`, `DetectionResult`, `RGBImage`.
537
622
 
538
- [Unreleased]: https://github.com/mauriciobenjamin700/ort-vision-sdk/compare/web-v0.7.0...HEAD
623
+ [Unreleased]: https://github.com/mauriciobenjamin700/ort-vision-sdk/compare/web-v0.8.0...HEAD
624
+ [0.8.0]: https://github.com/mauriciobenjamin700/ort-vision-sdk/compare/web-v0.7.1...web-v0.8.0
625
+ [0.7.1]: https://github.com/mauriciobenjamin700/ort-vision-sdk/compare/web-v0.7.0...web-v0.7.1
539
626
  [0.7.0]: https://github.com/mauriciobenjamin700/ort-vision-sdk/compare/web-v0.6.1...web-v0.7.0
540
627
  [0.6.1]: https://github.com/mauriciobenjamin700/ort-vision-sdk/compare/web-v0.6.0...web-v0.6.1
541
628
  [0.6.0]: https://github.com/mauriciobenjamin700/ort-vision-sdk/compare/web-v0.5.1...web-v0.6.0
@@ -12,10 +12,41 @@
12
12
  * automatically when WebGPU is not supported by the browser or device.
13
13
  */
14
14
  export declare const DEFAULT_PROVIDERS: readonly string[];
15
+ /**
16
+ * The provider ORT-Web can always run, whatever the device.
17
+ *
18
+ * Used as the floor when capability detection rules everything else out. Passing
19
+ * ORT a list it cannot satisfy is not a graceful failure — `InferenceSession.create`
20
+ * rejects with "no available backend found" and the page gets no inference at
21
+ * all, which is worse than the slow-but-working fallback the warning describes.
22
+ */
23
+ export declare const FALLBACK_PROVIDER = "wasm";
15
24
  /**
16
25
  * Resolve the execution providers to pass to `InferenceSession.create`.
17
26
  *
18
27
  * @param requested Explicit provider list in preference order; `undefined` returns the default.
19
28
  */
20
29
  export declare function resolveProviders(requested?: readonly string[]): string[];
30
+ /**
31
+ * Narrow a provider list to the ones this browser can actually offer.
32
+ *
33
+ * ORT-Web exposes no equivalent of Node's `session.getProviders()`, so there is
34
+ * no way to ask which provider a session ended up on. What the browser *does*
35
+ * answer is whether the underlying API exists at all — no `navigator.gpu`, or no
36
+ * adapter behind it, means `webgpu` was never going to run — and that covers the
37
+ * case that actually bites: a page asking for WebGPU on a device without it,
38
+ * silently getting WASM, and being several times slower than intended with no
39
+ * error to point at.
40
+ *
41
+ * This is best-effort by construction. A provider that survives here can still
42
+ * fail inside ORT for a reason the browser does not surface (a missing shader
43
+ * feature, an exhausted device), so a surviving entry means "not ruled out",
44
+ * not "confirmed running". Anything this function does not know how to test is
45
+ * kept rather than dropped: guessing a provider away would be worse than
46
+ * admitting ignorance about it.
47
+ *
48
+ * @param requested Providers in preference order, already resolved.
49
+ * @returns The subset that is not ruled out, in the same order.
50
+ */
51
+ export declare function detectProviders(requested: readonly string[]): Promise<string[]>;
21
52
  //# sourceMappingURL=providers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/core/providers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAuB,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAQxE"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/core/providers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAuB,CAAC;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,SAAS,CAAC;AAExC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAQxE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC,CAYnB"}
@@ -12,6 +12,15 @@
12
12
  * automatically when WebGPU is not supported by the browser or device.
13
13
  */
14
14
  export const DEFAULT_PROVIDERS = ["webgpu", "wasm"];
15
+ /**
16
+ * The provider ORT-Web can always run, whatever the device.
17
+ *
18
+ * Used as the floor when capability detection rules everything else out. Passing
19
+ * ORT a list it cannot satisfy is not a graceful failure — `InferenceSession.create`
20
+ * rejects with "no available backend found" and the page gets no inference at
21
+ * all, which is worse than the slow-but-working fallback the warning describes.
22
+ */
23
+ export const FALLBACK_PROVIDER = "wasm";
15
24
  /**
16
25
  * Resolve the execution providers to pass to `InferenceSession.create`.
17
26
  *
@@ -26,4 +35,59 @@ export function resolveProviders(requested) {
26
35
  }
27
36
  return [...requested];
28
37
  }
38
+ /**
39
+ * Narrow a provider list to the ones this browser can actually offer.
40
+ *
41
+ * ORT-Web exposes no equivalent of Node's `session.getProviders()`, so there is
42
+ * no way to ask which provider a session ended up on. What the browser *does*
43
+ * answer is whether the underlying API exists at all — no `navigator.gpu`, or no
44
+ * adapter behind it, means `webgpu` was never going to run — and that covers the
45
+ * case that actually bites: a page asking for WebGPU on a device without it,
46
+ * silently getting WASM, and being several times slower than intended with no
47
+ * error to point at.
48
+ *
49
+ * This is best-effort by construction. A provider that survives here can still
50
+ * fail inside ORT for a reason the browser does not surface (a missing shader
51
+ * feature, an exhausted device), so a surviving entry means "not ruled out",
52
+ * not "confirmed running". Anything this function does not know how to test is
53
+ * kept rather than dropped: guessing a provider away would be worse than
54
+ * admitting ignorance about it.
55
+ *
56
+ * @param requested Providers in preference order, already resolved.
57
+ * @returns The subset that is not ruled out, in the same order.
58
+ */
59
+ export async function detectProviders(requested) {
60
+ const webgpu = await hasWebGpuAdapter();
61
+ return requested.filter((provider) => {
62
+ switch (provider) {
63
+ case "webgpu":
64
+ return webgpu;
65
+ case "webnn":
66
+ return typeof navigator !== "undefined" && "ml" in navigator;
67
+ default:
68
+ return true;
69
+ }
70
+ });
71
+ }
72
+ /**
73
+ * Whether this environment exposes a WebGPU adapter.
74
+ *
75
+ * `navigator.gpu` existing is not enough — a browser can ship the API and still
76
+ * hand back no adapter (a blocklisted driver, a headless context, a machine with
77
+ * no suitable GPU), which is exactly the configuration where a page asks for
78
+ * WebGPU and quietly runs on WASM.
79
+ */
80
+ async function hasWebGpuAdapter() {
81
+ const gpu = globalThis.navigator
82
+ ?.gpu;
83
+ if (gpu === undefined) {
84
+ return false;
85
+ }
86
+ try {
87
+ return (await gpu.requestAdapter()) !== null;
88
+ }
89
+ catch {
90
+ return false;
91
+ }
92
+ }
29
93
  //# sourceMappingURL=providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/core/providers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA6B;IAC5D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/core/providers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAEvE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAA6B;IAC5D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAA4B;IAE5B,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,OAAO,MAAM,CAAC;YAChB,KAAK,OAAO;gBACV,OAAO,OAAO,SAAS,KAAK,WAAW,IAAI,IAAI,IAAI,SAAS,CAAC;YAC/D;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,gBAAgB;IAC7B,MAAM,GAAG,GAAI,UAAU,CAAC,SAA0E;QAChG,EAAE,GAAG,CAAC;IACR,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -6,7 +6,12 @@ import { type DeclaredShape } from "./graph.js";
6
6
  /** Anything `InferenceSession.create` accepts. */
7
7
  export type ModelSource = string | ArrayBufferLike | Uint8Array;
8
8
  export interface OrtSessionOptions {
9
- /** Execution providers in preference order. `undefined` uses {@link DEFAULT_PROVIDERS}. */
9
+ /**
10
+ * Execution providers in preference order. `undefined` uses {@link DEFAULT_PROVIDERS}.
11
+ *
12
+ * Naming one explicitly also opts into a `console.warn` when this browser
13
+ * cannot offer it, instead of falling back in silence.
14
+ */
10
15
  readonly providers?: readonly string[];
11
16
  /** Optional ORT session options forwarded to `InferenceSession.create`. */
12
17
  readonly sessionOptions?: ort.InferenceSession.SessionOptions;
@@ -38,8 +43,32 @@ export interface OrtSessionOptions {
38
43
  */
39
44
  export declare class OrtSession {
40
45
  private readonly _session;
46
+ /**
47
+ * Execution providers this session is expected to run on.
48
+ *
49
+ * The requested list narrowed to what this browser can actually offer — a
50
+ * `webgpu` entry survives only where an adapter exists. Best-effort: ORT-Web
51
+ * exposes no way to ask which provider a session ended up on, so an entry
52
+ * here means "not ruled out", not "confirmed". See
53
+ * {@link requestedProviders} for what was asked for.
54
+ *
55
+ * When nothing survives — a caller asking for `webgpu` alone on a device
56
+ * without it — this falls back to {@link FALLBACK_PROVIDER}, which ORT-Web
57
+ * can always run. Handing ORT the unsatisfiable list instead makes
58
+ * `InferenceSession.create` reject with "no available backend found", so the
59
+ * page gets no inference at all rather than the slow-but-working fallback
60
+ * the `console.warn` describes. Measured in a real Chromium, where
61
+ * `navigator.gpu` exists but yields no adapter.
62
+ */
41
63
  readonly providers: readonly string[];
42
64
  private readonly _metadata;
65
+ /**
66
+ * Execution providers that were asked for, after defaults were applied.
67
+ *
68
+ * Kept separate because ORT-Web falls back silently: a page that asks for
69
+ * `webgpu` on a device without it runs on WASM and is told nothing.
70
+ */
71
+ readonly requestedProviders: readonly string[];
43
72
  private constructor();
44
73
  /**
45
74
  * Load an ONNX model into an ORT inference session.
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,YAAY,CAAC;AAIpE,kDAAkD;AAClD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,eAAe,GAAG,UAAU,CAAC;AA+ChE,MAAM,WAAW,iBAAiB;IAChC,2FAA2F;IAC3F,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,2EAA2E;IAC3E,QAAQ,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,cAAc,CAAC;IAC9D;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;GAMG;AACH,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;aACT,SAAS,EAAE,SAAS,MAAM,EAAE;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAH5B,OAAO;IAMP;;;;;;;;;;;;;;;;;OAiBG;WACU,MAAM,CACjB,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,CAAC;IAkCtB,yDAAyD;IACzD,IAAI,UAAU,IAAI,SAAS,MAAM,EAAE,CAElC;IAED,kDAAkD;IAClD,IAAI,SAAS,IAAI,MAAM,CAMtB;IAED,0DAA0D;IAC1D,IAAI,WAAW,IAAI,SAAS,MAAM,EAAE,CAEnC;IAED;;;;;;OAMG;IACH,IAAI,WAAW,IAAI,SAAS,aAAa,EAAE,CAM1C;IAED;;;;OAIG;IACH,IAAI,UAAU,IAAI,aAAa,CAE9B;IAED;;;;;OAKG;IACH,IAAI,YAAY,IAAI,SAAS,aAAa,EAAE,CAM3C;IAED;;;;OAIG;IACH,IAAI,WAAW,IAAI,aAAa,CAE/B;IAED;;;;;;;OAOG;IACH,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAE/C;IAED;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,wEAAwE;IACxE,IAAI,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAE9B;IAED;;;;;OAKG;IACG,GAAG,CACP,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAWvC"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,YAAY,CAAC;AAIpE,kDAAkD;AAClD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,eAAe,GAAG,UAAU,CAAC;AA+ChE,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,2EAA2E;IAC3E,QAAQ,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,cAAc,CAAC;IAC9D;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AA4BD;;;;;;GAMG;AACH,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB;;;;;;;;;;;;;;;;OAgBG;aACa,SAAS,EAAE,SAAS,MAAM,EAAE;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B;;;;;OAKG;aACa,kBAAkB,EAAE,SAAS,MAAM,EAAE;IA3BvD,OAAO;IA8BP;;;;;;;;;;;;;;;;;OAiBG;WACU,MAAM,CACjB,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,CAAC;IAuCtB,yDAAyD;IACzD,IAAI,UAAU,IAAI,SAAS,MAAM,EAAE,CAElC;IAED,kDAAkD;IAClD,IAAI,SAAS,IAAI,MAAM,CAMtB;IAED,0DAA0D;IAC1D,IAAI,WAAW,IAAI,SAAS,MAAM,EAAE,CAEnC;IAED;;;;;;OAMG;IACH,IAAI,WAAW,IAAI,SAAS,aAAa,EAAE,CAM1C;IAED;;;;OAIG;IACH,IAAI,UAAU,IAAI,aAAa,CAE9B;IAED;;;;;OAKG;IACH,IAAI,YAAY,IAAI,SAAS,aAAa,EAAE,CAM3C;IAED;;;;OAIG;IACH,IAAI,WAAW,IAAI,aAAa,CAE/B;IAED;;;;;;;OAOG;IACH,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAE/C;IAED;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,wEAAwE;IACxE,IAAI,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAE9B;IAED;;;;;OAKG;IACG,GAAG,CACP,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAWvC"}
@@ -5,7 +5,7 @@ import * as ortRuntime from "onnxruntime-web";
5
5
  import { InferenceError, ModelLoadError } from "./exceptions.js";
6
6
  import { declaredShapesFrom } from "./graph.js";
7
7
  import { readModelMetadata } from "./metadata.js";
8
- import { resolveProviders } from "./providers.js";
8
+ import { FALLBACK_PROVIDER, detectProviders, resolveProviders } from "./providers.js";
9
9
  /**
10
10
  * Fetch a model URL as bytes so its metadata can be read.
11
11
  *
@@ -48,6 +48,26 @@ function warnMetadataUnavailable(url, reason) {
48
48
  "class names are unavailable, so labels fall back to class_0, class_1, ... " +
49
49
  "Pass `labels` explicitly to name them.");
50
50
  }
51
+ /**
52
+ * Warn when a provider named explicitly by the caller is not going to run.
53
+ *
54
+ * Only explicit requests are worth a warning. The default list exists precisely
55
+ * so that falling from `webgpu` to `wasm` is the expected outcome — but a caller
56
+ * who wrote `providers: ["webgpu"]` and lands on WASM has a page several times
57
+ * slower than intended and nothing in the console to explain it.
58
+ *
59
+ * @param requested Providers that were asked for.
60
+ * @param effective Providers that survived capability detection.
61
+ */
62
+ function warnOnDroppedProviders(requested, effective) {
63
+ const dropped = requested.filter((provider) => !effective.includes(provider));
64
+ if (dropped.length === 0) {
65
+ return;
66
+ }
67
+ console.warn(`This browser cannot offer the requested execution provider(s) ${JSON.stringify(dropped)}; ` +
68
+ `the session will run on ${JSON.stringify(effective)}. Inference still produces correct ` +
69
+ "results, on the fallback provider.");
70
+ }
51
71
  /**
52
72
  * Wrap an ONNX Runtime Web `InferenceSession` with convenient metadata access.
53
73
  *
@@ -59,10 +79,37 @@ export class OrtSession {
59
79
  _session;
60
80
  providers;
61
81
  _metadata;
62
- constructor(_session, providers, _metadata) {
82
+ requestedProviders;
83
+ constructor(_session,
84
+ /**
85
+ * Execution providers this session is expected to run on.
86
+ *
87
+ * The requested list narrowed to what this browser can actually offer — a
88
+ * `webgpu` entry survives only where an adapter exists. Best-effort: ORT-Web
89
+ * exposes no way to ask which provider a session ended up on, so an entry
90
+ * here means "not ruled out", not "confirmed". See
91
+ * {@link requestedProviders} for what was asked for.
92
+ *
93
+ * When nothing survives — a caller asking for `webgpu` alone on a device
94
+ * without it — this falls back to {@link FALLBACK_PROVIDER}, which ORT-Web
95
+ * can always run. Handing ORT the unsatisfiable list instead makes
96
+ * `InferenceSession.create` reject with "no available backend found", so the
97
+ * page gets no inference at all rather than the slow-but-working fallback
98
+ * the `console.warn` describes. Measured in a real Chromium, where
99
+ * `navigator.gpu` exists but yields no adapter.
100
+ */
101
+ providers, _metadata,
102
+ /**
103
+ * Execution providers that were asked for, after defaults were applied.
104
+ *
105
+ * Kept separate because ORT-Web falls back silently: a page that asks for
106
+ * `webgpu` on a device without it runs on WASM and is told nothing.
107
+ */
108
+ requestedProviders) {
63
109
  this._session = _session;
64
110
  this.providers = providers;
65
111
  this._metadata = _metadata;
112
+ this.requestedProviders = requestedProviders;
66
113
  }
67
114
  /**
68
115
  * Load an ONNX model into an ORT inference session.
@@ -83,7 +130,12 @@ export class OrtSession {
83
130
  * @throws {@link ModelLoadError} if the model cannot be loaded.
84
131
  */
85
132
  static async create(model, options = {}) {
86
- const providers = resolveProviders(options.providers);
133
+ const requested = resolveProviders(options.providers);
134
+ const detected = await detectProviders(requested);
135
+ const providers = detected.length > 0 ? detected : [FALLBACK_PROVIDER];
136
+ if (options.providers !== undefined && options.providers.length > 0) {
137
+ warnOnDroppedProviders(requested, providers);
138
+ }
87
139
  const sessionOptions = {
88
140
  ...(options.sessionOptions ?? {}),
89
141
  executionProviders: providers,
@@ -106,7 +158,7 @@ export class OrtSession {
106
158
  catch (err) {
107
159
  throw new ModelLoadError(`Failed to load ONNX model: ${err.message}`, { cause: err });
108
160
  }
109
- return new OrtSession(session, providers, metadata);
161
+ return new OrtSession(session, providers, metadata, requested);
110
162
  }
111
163
  /** Names of the model's inputs, in declaration order. */
112
164
  get inputNames() {
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
package/dist/fusion.d.ts CHANGED
@@ -46,7 +46,14 @@ export declare const INPUT_SOURCE = "source_image";
46
46
  export declare const INPUT_SCALE = "letterbox_scale";
47
47
  /** Name of the `[2]` float32 `[padLeft, padTop]`. Only with `cropSource === "original"`. */
48
48
  export declare const INPUT_PAD = "letterbox_pad";
49
- /** Name of the `[K, 4]` float32 xyxy output, in **letterboxed** input pixels. */
49
+ /**
50
+ * Name of the `[K, 4]` float32 xyxy output, in **letterboxed** input pixels.
51
+ *
52
+ * A file fused by `ort-vision-sdk` 0.9.0 or later reports the box that was
53
+ * actually classified: clamped to the image the crop came from, exactly as
54
+ * RoiAlign received it. Older files report the raw box, so one that ran off the
55
+ * frame draws a rectangle wider than the region the classifier saw.
56
+ */
50
57
  export declare const OUTPUT_BOXES = "boxes";
51
58
  /** Name of the `[K]` float32 detection-confidence output. */
52
59
  export declare const OUTPUT_SCORES = "scores";
@@ -1 +1 @@
1
- {"version":3,"file":"fusion.d.ts","sourceRoot":"","sources":["../src/fusion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,UAAU,CAAC;AAEvD,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,oBAAoB,CAAC;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,gGAAgG;AAChG,eAAO,MAAM,WAAW,WAAW,CAAC;AAEpC,wFAAwF;AACxF,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,+FAA+F;AAC/F,eAAO,MAAM,WAAW,oBAAoB,CAAC;AAE7C,4FAA4F;AAC5F,eAAO,MAAM,SAAS,kBAAkB,CAAC;AAEzC,iFAAiF;AACjF,eAAO,MAAM,YAAY,UAAU,CAAC;AAEpC,6DAA6D;AAC7D,eAAO,MAAM,aAAa,WAAW,CAAC;AAEtC,qDAAqD;AACrD,eAAO,MAAM,cAAc,YAAY,CAAC;AAExC,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AAEtD,0FAA0F;AAC1F,eAAO,MAAM,YAAY,UAAU,CAAC;AAEpC,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,uDAAuD;IACvD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,uFAAuF;IACvF,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACjD,2DAA2D;IAC3D,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACnD,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC;AA8CD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,GACrD,UAAU,GAAG,IAAI,CAmCnB"}
1
+ {"version":3,"file":"fusion.d.ts","sourceRoot":"","sources":["../src/fusion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,UAAU,CAAC;AAEvD,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,oBAAoB,CAAC;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,gGAAgG;AAChG,eAAO,MAAM,WAAW,WAAW,CAAC;AAEpC,wFAAwF;AACxF,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,+FAA+F;AAC/F,eAAO,MAAM,WAAW,oBAAoB,CAAC;AAE7C,4FAA4F;AAC5F,eAAO,MAAM,SAAS,kBAAkB,CAAC;AAEzC;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,UAAU,CAAC;AAEpC,6DAA6D;AAC7D,eAAO,MAAM,aAAa,WAAW,CAAC;AAEtC,qDAAqD;AACrD,eAAO,MAAM,cAAc,YAAY,CAAC;AAExC,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AAEtD,0FAA0F;AAC1F,eAAO,MAAM,YAAY,UAAU,CAAC;AAEpC,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,uDAAuD;IACvD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,uFAAuF;IACvF,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACjD,2DAA2D;IAC3D,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACnD,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC;AA8CD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,GACrD,UAAU,GAAG,IAAI,CAmCnB"}
package/dist/fusion.js CHANGED
@@ -36,7 +36,14 @@ export const INPUT_SOURCE = "source_image";
36
36
  export const INPUT_SCALE = "letterbox_scale";
37
37
  /** Name of the `[2]` float32 `[padLeft, padTop]`. Only with `cropSource === "original"`. */
38
38
  export const INPUT_PAD = "letterbox_pad";
39
- /** Name of the `[K, 4]` float32 xyxy output, in **letterboxed** input pixels. */
39
+ /**
40
+ * Name of the `[K, 4]` float32 xyxy output, in **letterboxed** input pixels.
41
+ *
42
+ * A file fused by `ort-vision-sdk` 0.9.0 or later reports the box that was
43
+ * actually classified: clamped to the image the crop came from, exactly as
44
+ * RoiAlign received it. Older files report the raw box, so one that ran off the
45
+ * frame draws a rectangle wider than the region the classifier saw.
46
+ */
40
47
  export const OUTPUT_BOXES = "boxes";
41
48
  /** Name of the `[K]` float32 detection-confidence output. */
42
49
  export const OUTPUT_SCORES = "scores";
@@ -1 +1 @@
1
- {"version":3,"file":"fusion.js","sourceRoot":"","sources":["../src/fusion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fusion.js","sourceRoot":"","sources":["../src/fusion.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -9,8 +9,9 @@ export { FusionError, ImageLoadError, InferenceError, LabelMapError, ModelLoadEr
9
9
  export { type ModelSource, type OrtSessionOptions, OrtSession, } from "./core/session.js";
10
10
  export { type DeclaredDim, type DeclaredShape, type ResolveInputSizeOptions, classificationNumClasses, declaredShapesFrom, detectionNumClasses, resolveInputSize, spatialInputSize, } from "./core/graph.js";
11
11
  export { modelNames, parseNames, readModelMetadata } from "./core/metadata.js";
12
- export { DEFAULT_PROVIDERS, resolveProviders } from "./core/providers.js";
12
+ export { DEFAULT_PROVIDERS, detectProviders, resolveProviders } from "./core/providers.js";
13
13
  export { type Speed, SpeedTimer } from "./core/timing.js";
14
+ export { CUSTOM_NORMALIZATION, IDENTITY_MEAN, IDENTITY_STD, IMAGENET_MEAN, IMAGENET_STD, type Normalization, type ResolvedNormalization, isUltralyticsClassifier, resolveNormalization, } from "./normalization.js";
14
15
  export { type ImageInput, loadImage } from "./io/image.js";
15
16
  export { FUSION_KIND_DETECT_CLASSIFY, INPUT_IMAGE, INPUT_PAD, INPUT_SCALE, INPUT_SOURCE, METADATA_PREFIX, OUTPUT_BOXES, OUTPUT_CLASSES, OUTPUT_NUM_DETECTIONS, OUTPUT_PROBS, OUTPUT_SCORES, type CropSource, type FusionSpec, readFusionSpec, } from "./fusion.js";
16
17
  export { type LetterboxResult, fromCv2, letterbox, normalize, resize, toCHW, toCv2, toFloat32, toFloat32Tensor, toTensor, } from "./preprocess/image.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,IAAI,EACJ,QAAQ,EACR,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,EACL,KAAK,EACL,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,oBAAoB,EACzB,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,KAAK,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EACL,2BAA2B,EAC3B,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,eAAe,EACpB,OAAO,EACP,SAAS,EACT,SAAS,EACT,MAAM,EACN,KAAK,EACL,KAAK,EACL,SAAS,EACT,eAAe,EACf,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,KAAK,UAAU,EACf,OAAO,EACP,IAAI,GACL,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,GAAG,GACJ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,aAAa,GACd,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,cAAc,GACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,SAAS,GACV,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,OAAO,EAAE,MAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,8 +9,9 @@ export { FusionError, ImageLoadError, InferenceError, LabelMapError, ModelLoadEr
9
9
  export { OrtSession, } from "./core/session.js";
10
10
  export { classificationNumClasses, declaredShapesFrom, detectionNumClasses, resolveInputSize, spatialInputSize, } from "./core/graph.js";
11
11
  export { modelNames, parseNames, readModelMetadata } from "./core/metadata.js";
12
- export { DEFAULT_PROVIDERS, resolveProviders } from "./core/providers.js";
12
+ export { DEFAULT_PROVIDERS, detectProviders, resolveProviders } from "./core/providers.js";
13
13
  export { SpeedTimer } from "./core/timing.js";
14
+ export { CUSTOM_NORMALIZATION, IDENTITY_MEAN, IDENTITY_STD, IMAGENET_MEAN, IMAGENET_STD, isUltralyticsClassifier, resolveNormalization, } from "./normalization.js";
14
15
  export { loadImage } from "./io/image.js";
15
16
  export { FUSION_KIND_DETECT_CLASSIFY, INPUT_IMAGE, INPUT_PAD, INPUT_SCALE, INPUT_SOURCE, METADATA_PREFIX, OUTPUT_BOXES, OUTPUT_CLASSES, OUTPUT_NUM_DETECTIONS, OUTPUT_PROBS, OUTPUT_SCORES, readFusionSpec, } from "./fusion.js";
16
17
  export { fromCv2, letterbox, normalize, resize, toCHW, toCv2, toFloat32, toFloat32Tensor, toTensor, } from "./preprocess/image.js";
@@ -23,5 +24,5 @@ export { Classifier, } from "./tasks/classifier.js";
23
24
  export { DetectClassify, } from "./tasks/detectClassify.js";
24
25
  export { Detector, } from "./tasks/detector.js";
25
26
  export { Segmenter, } from "./tasks/segmenter.js";
26
- export const VERSION = "0.7.1";
27
+ export const VERSION = "0.8.0";
27
28
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,IAAI,EACJ,QAAQ,GAKT,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,EACL,KAAK,EACL,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EAGZ,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAGL,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIL,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAc,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAmB,SAAS,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EACL,2BAA2B,EAC3B,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,aAAa,EAGb,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,OAAO,EACP,SAAS,EACT,SAAS,EACT,MAAM,EACN,KAAK,EACL,KAAK,EACL,SAAS,EACT,eAAe,EACf,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAGL,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAEL,OAAO,EACP,IAAI,GACL,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAKL,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,GAAG,GACJ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAGL,aAAa,GACd,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAGL,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,cAAc,GACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAIL,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAIL,SAAS,GACV,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAC,MAAM,OAAO,GAAW,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,IAAI,EACJ,QAAQ,GAKT,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,EACL,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,EACL,KAAK,EACL,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,YAAY,EAGZ,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAGL,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIL,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAc,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EAGZ,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAmB,SAAS,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EACL,2BAA2B,EAC3B,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,aAAa,EAGb,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAEL,OAAO,EACP,SAAS,EACT,SAAS,EACT,MAAM,EACN,KAAK,EACL,KAAK,EACL,SAAS,EACT,eAAe,EACf,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAGL,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAEL,OAAO,EACP,IAAI,GACL,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAKL,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,GAAG,GACJ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAGL,aAAa,GACd,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAGL,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,cAAc,GACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAIL,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAIL,SAAS,GACV,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAC,MAAM,OAAO,GAAW,OAAO,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Which preprocessing a classifier expects its input to have had.
3
+ *
4
+ * A classifier is trained on a specific tensor, and feeding it a differently
5
+ * prepared one degrades it silently — no exception, no warning, just worse
6
+ * predictions. The two families this SDK sees most disagree completely:
7
+ * torchvision-style models want the ImageNet mean and deviation subtracted and
8
+ * divided out, while an Ultralytics classification head consumes raw `[0, 1]`.
9
+ *
10
+ * Guessing wrong is not detectable from the outside, but it is not a guess: an
11
+ * Ultralytics export stamps `author` and `task` into its own metadata, and every
12
+ * task in this SDK already reads that map for the class names.
13
+ *
14
+ * Mirrors `ort_vision_sdk.normalization` in the Python SDK; the two must agree,
15
+ * because the same model file is driven by both.
16
+ */
17
+ /**
18
+ * Which preprocessing the classifier expects its input to have had.
19
+ *
20
+ * - `"auto"` (the default wherever it is accepted) reads the model's own export
21
+ * metadata and picks. An Ultralytics classification head gets
22
+ * `"ultralytics"`; anything else gets `"imagenet"`.
23
+ * - `"imagenet"` subtracts the ImageNet mean and divides by the ImageNet
24
+ * deviation — the torchvision convention.
25
+ * - `"ultralytics"` leaves the image in `[0, 1]`. Ultralytics' own classifier
26
+ * applies no mean/std at all, so anything else feeds it images it never saw
27
+ * in training.
28
+ * - `"none"` is the same arithmetic as `"ultralytics"` — identity — under a
29
+ * name that says "this model wants raw `[0, 1]`" rather than naming a vendor.
30
+ */
31
+ export type Normalization = "auto" | "imagenet" | "ultralytics" | "none";
32
+ /** Per-channel RGB mean of ImageNet, the torchvision preprocessing convention. */
33
+ export declare const IMAGENET_MEAN: readonly [number, number, number];
34
+ /** Per-channel RGB standard deviation of ImageNet. */
35
+ export declare const IMAGENET_STD: readonly [number, number, number];
36
+ /** Mean that leaves an image untouched — what an Ultralytics classifier expects. */
37
+ export declare const IDENTITY_MEAN: readonly [number, number, number];
38
+ /** Deviation that leaves an image untouched — what an Ultralytics classifier expects. */
39
+ export declare const IDENTITY_STD: readonly [number, number, number];
40
+ /** Name reported when the caller supplied `mean`/`std` directly. */
41
+ export declare const CUSTOM_NORMALIZATION = "custom";
42
+ /** What {@link resolveNormalization} settled on. */
43
+ export interface ResolvedNormalization {
44
+ /** The preset name, or `"custom"` when the caller supplied the values. */
45
+ readonly name: string;
46
+ /** Per-channel mean to subtract. */
47
+ readonly mean: readonly [number, number, number];
48
+ /** Per-channel deviation to divide by. */
49
+ readonly std: readonly [number, number, number];
50
+ }
51
+ /**
52
+ * Whether a metadata map came out of `YOLO(...).export(format="onnx")`.
53
+ *
54
+ * Every Ultralytics export stamps `author` and `task` into its metadata, and the
55
+ * pair is unambiguous: `"Ultralytics"` plus `"classify"` is a classification head
56
+ * from that codebase and nothing else.
57
+ *
58
+ * @param metadata The model's custom metadata map.
59
+ */
60
+ export declare function isUltralyticsClassifier(metadata: Readonly<Record<string, string>>): boolean;
61
+ /**
62
+ * Settle which `mean`/`std` to apply, and what to call the choice.
63
+ *
64
+ * Explicit `mean`/`std` always win — they are the escape hatch for a model whose
65
+ * preprocessing neither preset describes. Anything they leave open falls back to
66
+ * the preset, so passing only a `mean` does not silently reset the deviation
67
+ * to 1.
68
+ *
69
+ * Warns (via `console.warn`) when the model is an Ultralytics export and the
70
+ * supplied values are not the identity it was trained with. Nothing fails in
71
+ * that case: the prediction has the right shape and is simply less accurate,
72
+ * which is exactly why it is worth saying out loud.
73
+ *
74
+ * @param metadata The model's custom metadata map, read to detect the family.
75
+ * @param options The preset asked for, plus any explicit `mean`/`std`.
76
+ * @throws {RangeError} If `normalization` is not a known preset, or names one
77
+ * while `mean`/`std` are also supplied — two answers to the same question.
78
+ */
79
+ export declare function resolveNormalization(metadata: Readonly<Record<string, string>>, options?: {
80
+ readonly normalization?: Normalization;
81
+ readonly mean?: readonly [number, number, number];
82
+ readonly std?: readonly [number, number, number];
83
+ }): ResolvedNormalization;
84
+ //# sourceMappingURL=normalization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalization.d.ts","sourceRoot":"","sources":["../src/normalization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;AAEzE,kFAAkF;AAClF,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAyB,CAAC;AAEtF,sDAAsD;AACtD,eAAO,MAAM,YAAY,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAyB,CAAC;AAErF,oFAAoF;AACpF,eAAO,MAAM,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAa,CAAC;AAE1E,yFAAyF;AACzF,eAAO,MAAM,YAAY,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAa,CAAC;AAEzE,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAU7C,oDAAoD;AACpD,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,0CAA0C;IAC1C,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACzC,OAAO,CAKT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC1C,OAAO,GAAE;IACP,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C,GACL,qBAAqB,CAwCvB"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Which preprocessing a classifier expects its input to have had.
3
+ *
4
+ * A classifier is trained on a specific tensor, and feeding it a differently
5
+ * prepared one degrades it silently — no exception, no warning, just worse
6
+ * predictions. The two families this SDK sees most disagree completely:
7
+ * torchvision-style models want the ImageNet mean and deviation subtracted and
8
+ * divided out, while an Ultralytics classification head consumes raw `[0, 1]`.
9
+ *
10
+ * Guessing wrong is not detectable from the outside, but it is not a guess: an
11
+ * Ultralytics export stamps `author` and `task` into its own metadata, and every
12
+ * task in this SDK already reads that map for the class names.
13
+ *
14
+ * Mirrors `ort_vision_sdk.normalization` in the Python SDK; the two must agree,
15
+ * because the same model file is driven by both.
16
+ */
17
+ /** Per-channel RGB mean of ImageNet, the torchvision preprocessing convention. */
18
+ export const IMAGENET_MEAN = [0.485, 0.456, 0.406];
19
+ /** Per-channel RGB standard deviation of ImageNet. */
20
+ export const IMAGENET_STD = [0.229, 0.224, 0.225];
21
+ /** Mean that leaves an image untouched — what an Ultralytics classifier expects. */
22
+ export const IDENTITY_MEAN = [0, 0, 0];
23
+ /** Deviation that leaves an image untouched — what an Ultralytics classifier expects. */
24
+ export const IDENTITY_STD = [1, 1, 1];
25
+ /** Name reported when the caller supplied `mean`/`std` directly. */
26
+ export const CUSTOM_NORMALIZATION = "custom";
27
+ const PRESETS = {
28
+ imagenet: [IMAGENET_MEAN, IMAGENET_STD],
29
+ ultralytics: [IDENTITY_MEAN, IDENTITY_STD],
30
+ none: [IDENTITY_MEAN, IDENTITY_STD],
31
+ };
32
+ /**
33
+ * Whether a metadata map came out of `YOLO(...).export(format="onnx")`.
34
+ *
35
+ * Every Ultralytics export stamps `author` and `task` into its metadata, and the
36
+ * pair is unambiguous: `"Ultralytics"` plus `"classify"` is a classification head
37
+ * from that codebase and nothing else.
38
+ *
39
+ * @param metadata The model's custom metadata map.
40
+ */
41
+ export function isUltralyticsClassifier(metadata) {
42
+ return ((metadata.author ?? "").trim().toLowerCase() === "ultralytics" &&
43
+ (metadata.task ?? "").trim().toLowerCase() === "classify");
44
+ }
45
+ /**
46
+ * Settle which `mean`/`std` to apply, and what to call the choice.
47
+ *
48
+ * Explicit `mean`/`std` always win — they are the escape hatch for a model whose
49
+ * preprocessing neither preset describes. Anything they leave open falls back to
50
+ * the preset, so passing only a `mean` does not silently reset the deviation
51
+ * to 1.
52
+ *
53
+ * Warns (via `console.warn`) when the model is an Ultralytics export and the
54
+ * supplied values are not the identity it was trained with. Nothing fails in
55
+ * that case: the prediction has the right shape and is simply less accurate,
56
+ * which is exactly why it is worth saying out loud.
57
+ *
58
+ * @param metadata The model's custom metadata map, read to detect the family.
59
+ * @param options The preset asked for, plus any explicit `mean`/`std`.
60
+ * @throws {RangeError} If `normalization` is not a known preset, or names one
61
+ * while `mean`/`std` are also supplied — two answers to the same question.
62
+ */
63
+ export function resolveNormalization(metadata, options = {}) {
64
+ const normalization = options.normalization ?? "auto";
65
+ const explicit = options.mean !== undefined || options.std !== undefined;
66
+ if (normalization !== "auto" && PRESETS[normalization] === undefined) {
67
+ throw new RangeError(`normalization must be one of 'auto', 'imagenet', 'ultralytics', 'none'; ` +
68
+ `got ${JSON.stringify(normalization)}.`);
69
+ }
70
+ if (explicit && normalization !== "auto") {
71
+ throw new RangeError(`Pass either normalization=${JSON.stringify(normalization)} or explicit mean/std, not both.`);
72
+ }
73
+ const ultralytics = isUltralyticsClassifier(metadata);
74
+ const preset = normalization === "auto" ? (ultralytics ? "ultralytics" : "imagenet") : normalization;
75
+ const [presetMean, presetStd] = PRESETS[preset];
76
+ if (!explicit) {
77
+ return { name: preset, mean: presetMean, std: presetStd };
78
+ }
79
+ const mean = options.mean ?? presetMean;
80
+ const std = options.std ?? presetStd;
81
+ if (ultralytics && !(isIdentity(mean, IDENTITY_MEAN) && isIdentity(std, IDENTITY_STD))) {
82
+ console.warn("The classifier is an Ultralytics export, whose classification head is trained on raw " +
83
+ `[0, 1] images, but mean=${JSON.stringify(mean)} / std=${JSON.stringify(std)} was ` +
84
+ "requested. It will be fed images normalized in a way it never saw in training, which " +
85
+ "degrades accuracy without raising anything. Drop mean/std to let normalization='auto' " +
86
+ "pick the identity.");
87
+ }
88
+ return { name: CUSTOM_NORMALIZATION, mean, std };
89
+ }
90
+ /**
91
+ * Whether two channel triples are equal.
92
+ *
93
+ * @param value The triple to check.
94
+ * @param reference The triple to compare against.
95
+ */
96
+ function isIdentity(value, reference) {
97
+ return value.every((entry, index) => entry === reference[index]);
98
+ }
99
+ //# sourceMappingURL=normalization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalization.js","sourceRoot":"","sources":["../src/normalization.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@
4
4
  import { type ModelSource, type OrtSessionOptions } from "../core/session.js";
5
5
  import { type ImageInput } from "../io/image.js";
6
6
  import { type LabelSpec } from "../labels.js";
7
+ import { type Normalization } from "../normalization.js";
7
8
  import { ClassificationResults } from "../results.js";
8
9
  import { VisionTask } from "./base.js";
9
10
  export interface ClassifierOptions extends OrtSessionOptions {
@@ -31,14 +32,27 @@ export interface ClassifierOptions extends OrtSessionOptions {
31
32
  * Runtime will accept. Defaults to `[224, 224]`.
32
33
  */
33
34
  readonly inputSize?: readonly [number, number];
34
- /** Per-channel RGB mean used for normalization. Defaults to ImageNet. */
35
+ /**
36
+ * Which preprocessing this model expects — see {@link Normalization}.
37
+ *
38
+ * Defaults to `"auto"`, which reads the model's own export metadata and picks
39
+ * `"ultralytics"` (raw `[0, 1]`) for an Ultralytics classification head and
40
+ * `"imagenet"` for everything else.
41
+ */
42
+ readonly normalization?: Normalization;
43
+ /** Per-channel RGB mean, overriding the preset. Defaults to the preset's. */
35
44
  readonly mean?: readonly [number, number, number];
36
- /** Per-channel RGB standard deviation. Defaults to ImageNet. */
45
+ /** Per-channel RGB standard deviation, overriding the preset. */
37
46
  readonly std?: readonly [number, number, number];
38
47
  /**
39
- * If `true` (default), apply softmax to the raw model output. Set to
40
- * `false` for models whose final layer already produces a probability
41
- * distribution.
48
+ * Whether the model's output still needs a softmax.
49
+ *
50
+ * Left undefined (the default), this reads the model's metadata and answers
51
+ * `false` for an Ultralytics classification export, whose graph already ends
52
+ * in one — applying a second softmax to a probability vector keeps the
53
+ * ranking but flattens the confidences, so the top-1 stays right while every
54
+ * number attached to it is wrong. Detection covers that family; for any other
55
+ * model that already emits probabilities, pass `false` explicitly.
42
56
  */
43
57
  readonly applySoftmax?: boolean;
44
58
  }
@@ -78,7 +92,27 @@ export declare class Classifier extends VisionTask {
78
92
  private readonly _mean;
79
93
  private readonly _std;
80
94
  private readonly _applySoftmax;
95
+ private readonly _normalization;
81
96
  private constructor();
97
+ /**
98
+ * Whether a softmax is applied to the model's output before ranking.
99
+ *
100
+ * Resolved once at construction. Worth reading when confidences look
101
+ * compressed: a second softmax over an already-normalized vector leaves the
102
+ * ordering intact and the numbers meaningless, which is invisible to any check
103
+ * that only looks at the predicted class.
104
+ */
105
+ get appliesSoftmax(): boolean;
106
+ /**
107
+ * Which preprocessing this classifier applies to every image.
108
+ *
109
+ * One of the {@link Normalization} preset names, or `"custom"` when the caller
110
+ * supplied `mean`/`std` directly. Worth reading when a model underperforms:
111
+ * feeding a classifier a differently prepared tensor than it was trained on
112
+ * degrades it without throwing anything, so "what does this assume" is the
113
+ * first question.
114
+ */
115
+ get normalization(): string;
82
116
  private _pipelineCache;
83
117
  /**
84
118
  * Run the model once on a zero tensor, paying one-time costs up front.
@@ -101,7 +135,14 @@ export declare class Classifier extends VisionTask {
101
135
  * fails if it is actually asked to preprocess something.
102
136
  */
103
137
  private get _pipeline();
104
- /** Load the model and resolve labels. */
138
+ /**
139
+ * Load the model, resolve labels, and settle the preprocessing.
140
+ *
141
+ * @param model The model source — a URL, or the bytes.
142
+ * @param options Labels, input size, normalization, and session options.
143
+ * @throws {RangeError} If `normalization` names an unknown preset, or names
144
+ * one while `mean`/`std` are also given.
145
+ */
105
146
  static create(model: ModelSource, options?: ClassifierOptions): Promise<Classifier>;
106
147
  /** Class labels indexed by class id. */
107
148
  get labels(): readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"classifier.d.ts","sourceRoot":"","sources":["../../src/tasks/classifier.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAc,MAAM,oBAAoB,CAAC;AAE1F,OAAO,EAAE,KAAK,UAAU,EAAa,MAAM,gBAAgB,CAAC;AAG5D,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,cAAc,CAAC;AAI7D,OAAO,EAAE,qBAAqB,EAAS,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAUvC,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,yEAAyE;IACzE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,gEAAgE;IAChE,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,UAAW,SAAQ,UAAU;IAGtC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAPhC,OAAO;IAYP,OAAO,CAAC,cAAc,CAA+B;IAErD;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C;;;;;;OAMG;IACH,OAAO,KAAK,SAAS,GAMpB;IAED,yCAAyC;WAC5B,MAAM,CACjB,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,UAAU,CAAC;IA0BtB,wCAAwC;IACxC,IAAI,MAAM,IAAI,SAAS,MAAM,EAAE,CAE9B;IAED,uEAAuE;IACvE,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAE5C;IAED;;;;;;OAMG;IACH,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzC;IAED,+CAA+C;IAC/C,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,4EAA4E;IACtE,IAAI,CACR,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAInC,4CAA4C;IACtC,OAAO,CACX,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAkEnC,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;CAGrB"}
1
+ {"version":3,"file":"classifier.d.ts","sourceRoot":"","sources":["../../src/tasks/classifier.ts"],"names":[],"mappings":"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"}
@@ -7,13 +7,12 @@ import { loadImage } from "../io/image.js";
7
7
  import { classificationNumClasses, resolveInputSize } from "../core/graph.js";
8
8
  import { modelNames } from "../core/metadata.js";
9
9
  import { resolveLabels } from "../labels.js";
10
+ import { isUltralyticsClassifier, resolveNormalization, } from "../normalization.js";
10
11
  import { softmax, topK } from "../postprocess/classification.js";
11
12
  import { toFloat32Tensor } from "../preprocess/image.js";
12
13
  import { ResizePipeline, zeroTensorData } from "../preprocess/pipeline.js";
13
14
  import { ClassificationResults, Probs } from "../results.js";
14
15
  import { VisionTask } from "./base.js";
15
- const IMAGENET_MEAN = [0.485, 0.456, 0.406];
16
- const IMAGENET_STD = [0.229, 0.224, 0.225];
17
16
  /**
18
17
  * Image classifier wrapping an ONNX model with ImageNet-style preprocessing.
19
18
  *
@@ -42,7 +41,8 @@ export class Classifier extends VisionTask {
42
41
  _mean;
43
42
  _std;
44
43
  _applySoftmax;
45
- constructor(session, _labels, _names, _inputSize, _mean, _std, _applySoftmax) {
44
+ _normalization;
45
+ constructor(session, _labels, _names, _inputSize, _mean, _std, _applySoftmax, _normalization) {
46
46
  super(session);
47
47
  this._labels = _labels;
48
48
  this._names = _names;
@@ -50,6 +50,30 @@ export class Classifier extends VisionTask {
50
50
  this._mean = _mean;
51
51
  this._std = _std;
52
52
  this._applySoftmax = _applySoftmax;
53
+ this._normalization = _normalization;
54
+ }
55
+ /**
56
+ * Whether a softmax is applied to the model's output before ranking.
57
+ *
58
+ * Resolved once at construction. Worth reading when confidences look
59
+ * compressed: a second softmax over an already-normalized vector leaves the
60
+ * ordering intact and the numbers meaningless, which is invisible to any check
61
+ * that only looks at the predicted class.
62
+ */
63
+ get appliesSoftmax() {
64
+ return this._applySoftmax;
65
+ }
66
+ /**
67
+ * Which preprocessing this classifier applies to every image.
68
+ *
69
+ * One of the {@link Normalization} preset names, or `"custom"` when the caller
70
+ * supplied `mean`/`std` directly. Worth reading when a model underperforms:
71
+ * feeding a classifier a differently prepared tensor than it was trained on
72
+ * degrades it without throwing anything, so "what does this assume" is the
73
+ * first question.
74
+ */
75
+ get normalization() {
76
+ return this._normalization;
53
77
  }
54
78
  _pipelineCache = null;
55
79
  /**
@@ -85,9 +109,21 @@ export class Classifier extends VisionTask {
85
109
  }
86
110
  return this._pipelineCache;
87
111
  }
88
- /** Load the model and resolve labels. */
112
+ /**
113
+ * Load the model, resolve labels, and settle the preprocessing.
114
+ *
115
+ * @param model The model source — a URL, or the bytes.
116
+ * @param options Labels, input size, normalization, and session options.
117
+ * @throws {RangeError} If `normalization` names an unknown preset, or names
118
+ * one while `mean`/`std` are also given.
119
+ */
89
120
  static async create(model, options = {}) {
90
121
  const session = await OrtSession.create(model, options);
122
+ const normalization = resolveNormalization(session.metadata, {
123
+ normalization: options.normalization,
124
+ mean: options.mean,
125
+ std: options.std,
126
+ });
91
127
  const numClasses = options.numClasses ?? classificationNumClasses(session.outputShape) ?? undefined;
92
128
  const labels = resolveLabels(options.labels ?? modelNames(session.metadata), {
93
129
  numClasses,
@@ -100,7 +136,7 @@ export class Classifier extends VisionTask {
100
136
  graphShape: session.inputShape,
101
137
  requested: options.inputSize,
102
138
  fallback: [224, 224],
103
- }), options.mean ?? IMAGENET_MEAN, options.std ?? IMAGENET_STD, options.applySoftmax ?? true);
139
+ }), normalization.mean, normalization.std, options.applySoftmax ?? !isUltralyticsClassifier(session.metadata), normalization.name);
104
140
  }
105
141
  /** Class labels indexed by class id. */
106
142
  get labels() {
@@ -1 +1 @@
1
- {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/tasks/classifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/tasks/classifier.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mauriciobenjamin700/ort-vision-sdk-web",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "description": "High-level TypeScript SDK for browser computer vision inference with ONNX Runtime Web.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",