@camstack/addon-pipeline 1.2.338 → 1.2.340
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audio-analyzer/index.js +22 -30
- package/dist/audio-analyzer/index.mjs +23 -31
- package/dist/{custom-model-catalog-CN6WPGB8.mjs → custom-model-catalog-BOnN63HU.mjs} +5 -1448
- package/dist/{custom-model-catalog-BYJyfhgj.js → custom-model-catalog-Cjbll1Sf.js} +18 -1461
- package/dist/detection-pipeline/index.js +208 -17
- package/dist/detection-pipeline/index.mjs +232 -41
- package/dist/{dist-WIL4yeyi.js → dist-BWigCRRN.js} +324 -51
- package/dist/{dist-CdmlJu1J.mjs → dist-CsA6fY6I.mjs} +311 -50
- package/dist/model-catalogs-BFBf8sHb.js +1522 -0
- package/dist/model-catalogs-D7JXV0_i.mjs +1445 -0
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/{node-CEtew1DU.mjs → node-BZ29vHq2.mjs} +1 -1
- package/dist/{node-DCFClFJ1.js → node-D52HHrVZ.js} +1 -1
- package/dist/pipeline-runner/index.js +3 -3
- package/dist/pipeline-runner/index.mjs +3 -3
- package/dist/{process-memory-Bsj_b---.js → process-memory-C9U6dKxS.js} +1 -1
- package/dist/{process-memory-maZfOnev.mjs → process-memory-DOEeg2pL.mjs} +1 -1
- package/dist/recorder/index.js +6 -2
- package/dist/recorder/index.mjs +6 -2
- package/dist/{segment-demux-js-CXmBf_nf.js → segment-demux-js-CMZSmwMp.js} +1 -1
- package/dist/{segment-demux-js-DnPcYYbc.mjs → segment-demux-js-DDgwrz-e.mjs} +1 -1
- package/dist/stream-broker/_stub.js +2 -2
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BdsJXZcP.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-6JIjr_ur.mjs} +2 -2
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js--yC-aoPc.mjs +26 -0
- package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Bt8aa0wk.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-B-hhg2sP.mjs} +1 -1
- package/dist/stream-broker/demux-worker-child.js +1 -1
- package/dist/stream-broker/demux-worker-child.mjs +1 -1
- package/dist/stream-broker/{hostInit-BU5SBy0i.mjs → hostInit-Ck1wQfKk.mjs} +2 -2
- package/dist/stream-broker/index.js +3 -3
- package/dist/stream-broker/index.mjs +3 -3
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-1Y-WK-Zy.mjs +0 -26
|
@@ -0,0 +1,1445 @@
|
|
|
1
|
+
import { Et as hfModelUrl } from "./dist-CsA6fY6I.mjs";
|
|
2
|
+
//#region src/detection-pipeline/registry/model-licenses.ts
|
|
3
|
+
var COCO_DATA = {
|
|
4
|
+
name: "COCO 2017",
|
|
5
|
+
terms: "annotations CC-BY-4.0; images under their Flickr owners' terms",
|
|
6
|
+
url: "https://cocodataset.org/#termsofuse"
|
|
7
|
+
};
|
|
8
|
+
var WIDER_FACE_DATA = {
|
|
9
|
+
name: "WIDER FACE",
|
|
10
|
+
terms: "research-oriented terms; images CC BY-NC-ND",
|
|
11
|
+
url: "http://shuoyang1213.me/WIDERFACE/"
|
|
12
|
+
};
|
|
13
|
+
var ULTRALYTICS_AGPL = {
|
|
14
|
+
weights: "AGPL-3.0",
|
|
15
|
+
code: "AGPL-3.0",
|
|
16
|
+
data: COCO_DATA,
|
|
17
|
+
upstream: {
|
|
18
|
+
name: "Ultralytics",
|
|
19
|
+
url: "https://github.com/ultralytics/ultralytics"
|
|
20
|
+
},
|
|
21
|
+
url: "https://github.com/ultralytics/ultralytics/blob/main/LICENSE",
|
|
22
|
+
attribution: "© Ultralytics, AGPL-3.0. Corresponding source: the upstream Ultralytics checkpoint and build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source.",
|
|
23
|
+
modifications: "exported to ONNX, OpenVINO IR and CoreML (scripts/build-camstack-models.py)",
|
|
24
|
+
hosting: "camstack-hf"
|
|
25
|
+
};
|
|
26
|
+
var ULTRALYTICS_YOLOV9_AGPL = {
|
|
27
|
+
...ULTRALYTICS_AGPL,
|
|
28
|
+
attribution: "© Ultralytics, AGPL-3.0 (Ultralytics YOLOv9 weights). YOLOv9 architecture: Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao, GPL-3.0 (https://github.com/WongKinYiu/yolov9). Corresponding source: the upstream Ultralytics checkpoint and build-camstack-models.py (with convert_lib.py) published at https://huggingface.co/camstack/camstack-models/tree/main/source."
|
|
29
|
+
};
|
|
30
|
+
/** The CamStack Coral COCO detector (SSD MobileNet V2). */
|
|
31
|
+
var CORAL_COCO_APACHE = {
|
|
32
|
+
weights: "Apache-2.0",
|
|
33
|
+
code: "Apache-2.0",
|
|
34
|
+
upstream: {
|
|
35
|
+
name: "Google Coral test_data",
|
|
36
|
+
url: "https://github.com/google-coral/test_data"
|
|
37
|
+
},
|
|
38
|
+
url: "https://github.com/google-coral/test_data/blob/master/LICENSE",
|
|
39
|
+
attribution: "Coral Edge TPU models and AIY Vision Birds V1 © Google LLC, Apache-2.0.",
|
|
40
|
+
hosting: "third-party",
|
|
41
|
+
data: COCO_DATA
|
|
42
|
+
};
|
|
43
|
+
var RFDETR_APACHE = {
|
|
44
|
+
weights: "Apache-2.0",
|
|
45
|
+
code: "Apache-2.0",
|
|
46
|
+
data: {
|
|
47
|
+
name: "parcel fine-tuning set (not recorded)",
|
|
48
|
+
terms: "UNVERIFIED"
|
|
49
|
+
},
|
|
50
|
+
upstream: {
|
|
51
|
+
name: "Roboflow RF-DETR",
|
|
52
|
+
url: "https://github.com/roboflow/rf-detr"
|
|
53
|
+
},
|
|
54
|
+
url: "https://github.com/roboflow/rf-detr/blob/develop/LICENSE",
|
|
55
|
+
attribution: "RF-DETR © Roboflow, Apache-2.0.",
|
|
56
|
+
modifications: "RF-DETR-M fine-tuned to 2 classes at 576; exported to ONNX, OpenVINO IR and CoreML; training checkpoint .pth also published",
|
|
57
|
+
hosting: "camstack-hf"
|
|
58
|
+
};
|
|
59
|
+
var YUNET_MIT = {
|
|
60
|
+
weights: "MIT",
|
|
61
|
+
code: "BSD-3-Clause",
|
|
62
|
+
data: WIDER_FACE_DATA,
|
|
63
|
+
upstream: {
|
|
64
|
+
name: "OpenCV Zoo YuNet",
|
|
65
|
+
url: "https://github.com/opencv/opencv_zoo/tree/main/models/face_detection_yunet"
|
|
66
|
+
},
|
|
67
|
+
url: "https://github.com/opencv/opencv_zoo/blob/main/models/face_detection_yunet/LICENSE",
|
|
68
|
+
attribution: "YuNet weights Copyright (c) 2020 Shiqi Yu, MIT. Training code: ShiqiYu/libfacedetection.train, BSD-3-Clause.",
|
|
69
|
+
modifications: "input contract baked into the graph (the pool RGB /255 becomes the upstream BGR 0..255: Mul(255) plus a channel Gather); internal tensor names cleared in the OpenVINO IR; ONNX fp32, OpenVINO IR fp32, CoreML fp16 (scripts/build-yunet-model.py); Edge TPU build: the bake folded into the first Conv, full-integer int8 post-training quantisation calibrated on CamStack person crops, compiled with edgetpu_compiler 14 (scripts/build-yunet-edgetpu.py)",
|
|
70
|
+
hosting: "camstack-hf"
|
|
71
|
+
};
|
|
72
|
+
var AURAFACE_APACHE = {
|
|
73
|
+
weights: "Apache-2.0",
|
|
74
|
+
upstream: {
|
|
75
|
+
name: "fal.ai AuraFace v1 (glintr100.onnx only)",
|
|
76
|
+
url: "https://huggingface.co/fal/AuraFace-v1"
|
|
77
|
+
},
|
|
78
|
+
url: "https://huggingface.co/fal/AuraFace-v1",
|
|
79
|
+
attribution: "AuraFace v1 by fal.ai, Apache-2.0.",
|
|
80
|
+
modifications: "input scaling y = 2x - 1 baked ahead of the first Conv (scripts/build-auraface-model.py); converted to OpenVINO IR and CoreML FP16",
|
|
81
|
+
hosting: "camstack-hf"
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* open-lpr's YOLOX-tiny plate detector (D719). Weights Apache-2.0 by the
|
|
85
|
+
* open-lpr repository licence and NOTICE (YOLOX code and its same-repository
|
|
86
|
+
* COCO weights are Apache-2.0; no Ultralytics weights used) — the weights'
|
|
87
|
+
* status is inferred from that statement, not from a per-file licence. The
|
|
88
|
+
* NOTICE travels verbatim (Apache-2.0 §4(d)): licenses/models/NOTICE-open-lpr.txt
|
|
89
|
+
* and the mirror folder's own NOTICE.
|
|
90
|
+
*/
|
|
91
|
+
var OPEN_LPR_YOLOX_APACHE = {
|
|
92
|
+
weights: "Apache-2.0",
|
|
93
|
+
code: "Apache-2.0",
|
|
94
|
+
data: {
|
|
95
|
+
name: "Simanno annotated plate corpus plus community-contributed photographs, pseudo-labelled by a teacher model (not published; the upstream NOTICE says the photographs were uploaded without consent obtained)",
|
|
96
|
+
terms: "UNKNOWN"
|
|
97
|
+
},
|
|
98
|
+
upstream: {
|
|
99
|
+
name: "open-lpr models (faisalthaheem/open-lpr-models), YOLOX-tiny",
|
|
100
|
+
url: "https://huggingface.co/faisalthaheem/open-lpr-models"
|
|
101
|
+
},
|
|
102
|
+
url: "https://huggingface.co/faisalthaheem/open-lpr-models/blob/aed0df35ec2891c5a90437041ebeadb592cc516b/LICENSE",
|
|
103
|
+
attribution: "open-lpr models, Copyright the open-lpr contributors, Apache-2.0 (https://huggingface.co/faisalthaheem/open-lpr-models, tag detector-2026.10.1). YOLOX architecture and COCO pretraining by Megvii (https://github.com/Megvii-BaseDetection/YOLOX), Apache-2.0. The upstream NOTICE is reproduced verbatim (`NOTICE-open-lpr.txt`).",
|
|
104
|
+
modifications: "input contract baked into the graph (static 1x3x640x640 RGB /255 becomes the upstream BGR 0..255: Mul(255) plus a channel Gather) and the output reshaped to the YOLOv8 layout (cx, cy, w, h, obj*cls); ONNX fp32, OpenVINO IR fp16, CoreML fp16 (scripts/build-yolox-plate-model.py); Edge TPU build: the Focus stem rewritten as the equivalent 6x6 stride-2 Conv with the input bake folded into it, the graph cut before the grid decode (raw per-stride head), full-integer int8 post-training quantisation calibrated on CamStack vehicle crops, compiled with edgetpu_compiler 14 (scripts/build-yolox-plate-edgetpu.py)",
|
|
105
|
+
hosting: "camstack-hf"
|
|
106
|
+
};
|
|
107
|
+
var FAST_PLATE_OCR_MIT = {
|
|
108
|
+
weights: "MIT",
|
|
109
|
+
code: "MIT",
|
|
110
|
+
data: {
|
|
111
|
+
name: "fast-plate-ocr training set",
|
|
112
|
+
terms: "private, not released upstream"
|
|
113
|
+
},
|
|
114
|
+
upstream: {
|
|
115
|
+
name: "ankandrew/fast-plate-ocr",
|
|
116
|
+
url: "https://github.com/ankandrew/fast-plate-ocr"
|
|
117
|
+
},
|
|
118
|
+
url: "https://github.com/ankandrew/fast-plate-ocr/blob/master/LICENSE",
|
|
119
|
+
attribution: "fast-plate-ocr, MIT License, copyright (c) 2024 ankandrew (full notice: licenses/models/MIT-fast-plate-ocr.txt).",
|
|
120
|
+
modifications: "input head removed (recorded in the ONNX doc_string); converted to OpenVINO IR and CoreML",
|
|
121
|
+
hosting: "camstack-hf"
|
|
122
|
+
};
|
|
123
|
+
var ANIMAL_CLASSIFIER_APACHE = {
|
|
124
|
+
weights: "Apache-2.0",
|
|
125
|
+
code: "Apache-2.0",
|
|
126
|
+
data: {
|
|
127
|
+
name: "Open Images V7",
|
|
128
|
+
terms: "annotations CC-BY-4.0 (Google LLC); images listed as CC-BY-2.0, no warranty",
|
|
129
|
+
url: "https://storage.googleapis.com/openimages/web/factsfigures_v7.html"
|
|
130
|
+
},
|
|
131
|
+
upstream: {
|
|
132
|
+
name: "timm EfficientNet-Lite0, fine-tuned by CamStack",
|
|
133
|
+
url: "https://github.com/huggingface/pytorch-image-models"
|
|
134
|
+
},
|
|
135
|
+
url: "https://github.com/huggingface/pytorch-image-models/blob/main/LICENSE",
|
|
136
|
+
attribution: "EfficientNet-Lite0 via timm (Ross Wightman), Apache-2.0. Open Images V7 annotations © Google LLC, CC BY 4.0; images listed by Google as CC BY 2.0, without warranty.",
|
|
137
|
+
modifications: "fine-tuned by CamStack on the Open Images V7 animal subset (8 classes); exported to ONNX, OpenVINO IR and CoreML",
|
|
138
|
+
hosting: "camstack-hf"
|
|
139
|
+
};
|
|
140
|
+
var AIY_BIRDS_APACHE = {
|
|
141
|
+
weights: "Apache-2.0",
|
|
142
|
+
upstream: {
|
|
143
|
+
name: "Google AIY Vision birds_V1",
|
|
144
|
+
url: "https://github.com/google-coral/test_data"
|
|
145
|
+
},
|
|
146
|
+
url: "https://github.com/google-coral/test_data/blob/master/LICENSE",
|
|
147
|
+
attribution: "Coral Edge TPU models and AIY Vision Birds V1 © Google LLC, Apache-2.0.",
|
|
148
|
+
modifications: "converted from TensorFlow with tf2onnx; OpenVINO IR and CoreML derived from it; the Edge TPU build is the Google full-integer quantised TFLite of the same model, compiled with edgetpu_compiler 14 (scripts/build-bird-classifier-edgetpu.py)",
|
|
149
|
+
hosting: "camstack-hf"
|
|
150
|
+
};
|
|
151
|
+
var VEHICLE_TYPE_V1_NC = {
|
|
152
|
+
weights: "CC-BY-NC-4.0",
|
|
153
|
+
code: "BSD-3-Clause",
|
|
154
|
+
data: {
|
|
155
|
+
name: "DrBimmer/vehicle-classification",
|
|
156
|
+
terms: "CC-BY-NC-4.0 — treated as binding the trained weights (conservative reading)",
|
|
157
|
+
url: "https://huggingface.co/datasets/DrBimmer/vehicle-classification"
|
|
158
|
+
},
|
|
159
|
+
upstream: {
|
|
160
|
+
name: "torchvision MobileNetV3-Large, fine-tuned by CamStack",
|
|
161
|
+
url: "https://github.com/pytorch/vision"
|
|
162
|
+
},
|
|
163
|
+
url: "https://creativecommons.org/licenses/by-nc/4.0/",
|
|
164
|
+
attribution: "torchvision MobileNetV3, BSD-3-Clause. Trained on the Vehicle classification dataset by DrBimmer (https://huggingface.co/datasets/DrBimmer/vehicle-classification), CC BY-NC 4.0.",
|
|
165
|
+
modifications: "fine-tuned by CamStack (8 classes); exported to ONNX, OpenVINO IR and CoreML",
|
|
166
|
+
hosting: "camstack-hf",
|
|
167
|
+
nonCommercial: true
|
|
168
|
+
};
|
|
169
|
+
var U2NET_APACHE = {
|
|
170
|
+
weights: "Apache-2.0",
|
|
171
|
+
code: "Apache-2.0",
|
|
172
|
+
data: {
|
|
173
|
+
name: "DUTS-TR",
|
|
174
|
+
terms: "not checked"
|
|
175
|
+
},
|
|
176
|
+
upstream: {
|
|
177
|
+
name: "xuebinqin/U-2-Net",
|
|
178
|
+
url: "https://github.com/xuebinqin/U-2-Net"
|
|
179
|
+
},
|
|
180
|
+
url: "https://github.com/xuebinqin/U-2-Net/blob/master/LICENSE",
|
|
181
|
+
attribution: "U²-Net © Xuebin Qin et al., Apache-2.0.",
|
|
182
|
+
modifications: "converted to ONNX, OpenVINO IR and CoreML",
|
|
183
|
+
hosting: "camstack-hf"
|
|
184
|
+
};
|
|
185
|
+
var SIGLIP2_APACHE = {
|
|
186
|
+
weights: "Apache-2.0",
|
|
187
|
+
code: "Apache-2.0",
|
|
188
|
+
data: {
|
|
189
|
+
name: "WebLI",
|
|
190
|
+
terms: "Google internal, not released"
|
|
191
|
+
},
|
|
192
|
+
upstream: {
|
|
193
|
+
name: "Google SigLIP 2 (google/siglip2-base-patch16-224)",
|
|
194
|
+
url: "https://huggingface.co/google/siglip2-base-patch16-224"
|
|
195
|
+
},
|
|
196
|
+
url: "https://huggingface.co/google/siglip2-base-patch16-224",
|
|
197
|
+
attribution: "SigLIP 2 © Google LLC, Apache-2.0.",
|
|
198
|
+
modifications: "input scaling y = 2x - 1 baked ahead of the patch embedding; converted to OpenVINO IR and CoreML FP16, an FP32 ONNX hosted as the verification reference (scripts/build-siglip2-model.py)",
|
|
199
|
+
hosting: "camstack-hf"
|
|
200
|
+
};
|
|
201
|
+
var YAMNET_APACHE = {
|
|
202
|
+
weights: "Apache-2.0",
|
|
203
|
+
code: "Apache-2.0",
|
|
204
|
+
data: {
|
|
205
|
+
name: "AudioSet ontology/labels",
|
|
206
|
+
terms: "CC-BY-4.0 (Google LLC)",
|
|
207
|
+
url: "https://research.google.com/audioset/"
|
|
208
|
+
},
|
|
209
|
+
upstream: {
|
|
210
|
+
name: "tensorflow/models research/audioset/yamnet",
|
|
211
|
+
url: "https://github.com/tensorflow/models/tree/master/research/audioset/yamnet"
|
|
212
|
+
},
|
|
213
|
+
url: "https://github.com/tensorflow/models/blob/master/LICENSE",
|
|
214
|
+
attribution: "YAMNet © Google LLC, Apache-2.0. AudioSet ontology and labels © Google LLC, CC BY 4.0.",
|
|
215
|
+
modifications: "converted from TensorFlow with tf2onnx; OpenVINO IR derived from it",
|
|
216
|
+
hosting: "camstack-hf"
|
|
217
|
+
};
|
|
218
|
+
var APPLE_SOUNDANALYSIS = {
|
|
219
|
+
weights: "LicenseRef-Apple-macOS",
|
|
220
|
+
upstream: {
|
|
221
|
+
name: "Apple SoundAnalysis (macOS built-in)",
|
|
222
|
+
url: "https://developer.apple.com/documentation/soundanalysis"
|
|
223
|
+
},
|
|
224
|
+
url: "https://www.apple.com/legal/sla/",
|
|
225
|
+
hosting: "built-in"
|
|
226
|
+
};
|
|
227
|
+
/** Compose a per-entry record: same upstream, entry-specific modifications / data. */
|
|
228
|
+
function licensed(base, overrides) {
|
|
229
|
+
return {
|
|
230
|
+
...base,
|
|
231
|
+
...overrides
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
//#endregion
|
|
235
|
+
//#region src/detection-pipeline/registry/model-catalogs.ts
|
|
236
|
+
var HF_REPO = "camstack/camstack-models";
|
|
237
|
+
var hf = (path) => hfModelUrl(HF_REPO, path);
|
|
238
|
+
/**
|
|
239
|
+
* Build an OpenVINO format entry (always python runtime).
|
|
240
|
+
*
|
|
241
|
+
* OpenVINO IR is a two-file bundle: a `.xml` topology + a sibling `.bin`
|
|
242
|
+
* weights file with the same basename. We declare the `.bin` in `files` so
|
|
243
|
+
* the (format-agnostic) downloader fetches it alongside the `.xml` — without
|
|
244
|
+
* the weights, OpenVINO compile fails with "Empty weights data in bin file".
|
|
245
|
+
* A plain `.onnx` run through the OpenVINO runtime (e.g. yamnet) has no
|
|
246
|
+
* sibling, so none is added.
|
|
247
|
+
*/
|
|
248
|
+
var ovFormat = (url, sizeMB) => {
|
|
249
|
+
const base = url.split("/").pop() ?? "";
|
|
250
|
+
const files = base.endsWith(".xml") ? [base.replace(/\.xml$/, ".bin")] : void 0;
|
|
251
|
+
return {
|
|
252
|
+
url,
|
|
253
|
+
sizeMB,
|
|
254
|
+
runtimes: ["python"],
|
|
255
|
+
...files ? { files } : {}
|
|
256
|
+
};
|
|
257
|
+
};
|
|
258
|
+
/**
|
|
259
|
+
* Build a precision-variant catalog entry (OpenVINO-only) derived from a base
|
|
260
|
+
* detection model. fp16 halves the weights (Intel iGPU/NPU sweet spot); int8 is
|
|
261
|
+
* NNCF post-training-quantized (~4× smaller, fastest on CPU/iGPU at a small
|
|
262
|
+
* accuracy cost). The IRs live next to the base `.xml` on HF as
|
|
263
|
+
* `camstack-<id>-<precision>.xml`. Lets an operator scale the model to the node
|
|
264
|
+
* (e.g. yolo26x-int8 on a 265K, yolo26n-int8 on an N100).
|
|
265
|
+
*/
|
|
266
|
+
var ovPrecisionVariant = (baseId, ovDir, baseName, precision, sizeMB, legacy = false) => ({
|
|
267
|
+
id: `${baseId}-${precision}`,
|
|
268
|
+
name: `${baseName} (${precision.toUpperCase()})`,
|
|
269
|
+
description: precision === "int8" ? `${baseName} — OpenVINO INT8 variant for Intel iGPU/CPU; scale by hardware. On the Intel NPU it loses recall — use the base model there` : `${baseName} — OpenVINO ${precision.toUpperCase()} variant for Intel iGPU/NPU; scale by hardware`,
|
|
270
|
+
inputSize: {
|
|
271
|
+
width: 640,
|
|
272
|
+
height: 640
|
|
273
|
+
},
|
|
274
|
+
labels: [],
|
|
275
|
+
preprocessMode: "letterbox",
|
|
276
|
+
license: licensed(ULTRALYTICS_AGPL, { modifications: precision === "int8" ? "exported to OpenVINO IR, then OpenVINO NNCF INT8 post-training quantisation" : "OpenVINO FP16 export" }),
|
|
277
|
+
formats: { openvino: ovFormat(hf(`${ovDir}/camstack-${baseId}-${precision}.xml`), sizeMB) },
|
|
278
|
+
...legacy ? { legacy: true } : {},
|
|
279
|
+
...precision === "int8" ? { group: {
|
|
280
|
+
family: baseId.slice(0, -1),
|
|
281
|
+
tier: baseId.slice(-1),
|
|
282
|
+
precision: "int8",
|
|
283
|
+
resolution: 640
|
|
284
|
+
} } : {}
|
|
285
|
+
});
|
|
286
|
+
var MLPACKAGE_FILES = [
|
|
287
|
+
"Manifest.json",
|
|
288
|
+
"Data/com.apple.CoreML/model.mlmodel",
|
|
289
|
+
"Data/com.apple.CoreML/weights/weight.bin"
|
|
290
|
+
];
|
|
291
|
+
var YOLO26_TIER_NAME = {
|
|
292
|
+
n: "Nano",
|
|
293
|
+
s: "Small",
|
|
294
|
+
m: "Medium",
|
|
295
|
+
l: "Large"
|
|
296
|
+
};
|
|
297
|
+
var YOLOV9_TIER_NAME = {
|
|
298
|
+
t: "Tiny",
|
|
299
|
+
s: "Small",
|
|
300
|
+
m: "Medium",
|
|
301
|
+
c: "Compact"
|
|
302
|
+
};
|
|
303
|
+
/**
|
|
304
|
+
* The Ultralytics YOLOv9 family (COCO-pretrained Ultralytics weights,
|
|
305
|
+
* re-exported by CamStack — not trained by us) — the default NPU-detection line.
|
|
306
|
+
* It runs on the Intel NPU ("AI Boost"), and its INT8 builds are as accurate
|
|
307
|
+
* there as on the CPU. YOLO26 runs on the NPU too since OpenVINO 2025.4
|
|
308
|
+
* (measured 2026-10-07): its base IRs match the CPU, its INT8 IRs lose recall
|
|
309
|
+
* there (see `yolo26Reduced`). Empirically: the yolov9t-320-int8 export = ~298 fps on the
|
|
310
|
+
* NPU vs yolo26n = 103 on the iGPU (~2.9×). t/s/m/c × {320,640}; each size ships
|
|
311
|
+
* a base entry (onnx + coreml + openvino **fp16**) + an OpenVINO **int8** entry
|
|
312
|
+
* (the NPU/iGPU-optimal config). CoreML (fp16) runs on the Mac ANE — the
|
|
313
|
+
* apple-ane default detector (`default-detection-model.ts`).
|
|
314
|
+
*
|
|
315
|
+
* The CoreML packages were FP32 until 2026-10-07 and ran on the Mac GPU, never
|
|
316
|
+
* the ANE. The FP16 re-export replaced them IN PLACE (same file names); the
|
|
317
|
+
* revision every mirror artefact carries (the sha256 of its weight file, from
|
|
318
|
+
* the downloader's generated table) makes a node holding the FP32 copy fetch
|
|
319
|
+
* the FP16 one (D743, D744).
|
|
320
|
+
*/
|
|
321
|
+
var yolov9Reduced = (tier, res, sizes) => {
|
|
322
|
+
const name = YOLOV9_TIER_NAME[tier] ?? tier.toUpperCase();
|
|
323
|
+
return [{
|
|
324
|
+
id: `yolov9${tier}-${res}`,
|
|
325
|
+
group: {
|
|
326
|
+
family: "yolov9",
|
|
327
|
+
tier,
|
|
328
|
+
resolution: res
|
|
329
|
+
},
|
|
330
|
+
name: `YOLOv9 ${name} @${res}`,
|
|
331
|
+
description: `YOLOv9 ${name} @${res}×${res} (Ultralytics) — OpenVINO fp16, runs on Intel NPU + iGPU.`,
|
|
332
|
+
inputSize: {
|
|
333
|
+
width: res,
|
|
334
|
+
height: res
|
|
335
|
+
},
|
|
336
|
+
labels: [],
|
|
337
|
+
preprocessMode: "letterbox",
|
|
338
|
+
license: licensed(ULTRALYTICS_YOLOV9_AGPL, { modifications: `exported at ${res}×${res} to ONNX, OpenVINO IR FP16 and CoreML` }),
|
|
339
|
+
formats: {
|
|
340
|
+
onnx: {
|
|
341
|
+
url: hf(`objectDetection/yolov9/onnx/camstack-yolov9${tier}-${res}.onnx`),
|
|
342
|
+
sizeMB: sizes.onnx
|
|
343
|
+
},
|
|
344
|
+
coreml: {
|
|
345
|
+
url: hf(`objectDetection/yolov9/coreml/camstack-yolov9${tier}-${res}.mlpackage`),
|
|
346
|
+
sizeMB: sizes.coreml,
|
|
347
|
+
isDirectory: true,
|
|
348
|
+
files: [...MLPACKAGE_FILES],
|
|
349
|
+
runtimes: ["python"]
|
|
350
|
+
},
|
|
351
|
+
openvino: ovFormat(hf(`objectDetection/yolov9/openvino/camstack-yolov9${tier}-${res}-fp16.xml`), sizes.ovFp16)
|
|
352
|
+
}
|
|
353
|
+
}, {
|
|
354
|
+
id: `yolov9${tier}-${res}-int8`,
|
|
355
|
+
group: {
|
|
356
|
+
family: "yolov9",
|
|
357
|
+
tier,
|
|
358
|
+
precision: "int8",
|
|
359
|
+
resolution: res
|
|
360
|
+
},
|
|
361
|
+
name: `YOLOv9 ${name} @${res} (INT8)`,
|
|
362
|
+
description: `YOLOv9 ${name} @${res} — OpenVINO INT8 for the Intel NPU / iGPU. The NPU's fastest config (Ultralytics YOLOv9 weights).`,
|
|
363
|
+
inputSize: {
|
|
364
|
+
width: res,
|
|
365
|
+
height: res
|
|
366
|
+
},
|
|
367
|
+
labels: [],
|
|
368
|
+
preprocessMode: "letterbox",
|
|
369
|
+
license: licensed(ULTRALYTICS_YOLOV9_AGPL, { modifications: `exported at ${res}×${res} to OpenVINO IR; OpenVINO NNCF INT8 post-training quantisation` }),
|
|
370
|
+
formats: { openvino: ovFormat(hf(`objectDetection/yolov9/openvino/camstack-yolov9${tier}-${res}-int8.xml`), sizes.ovInt8) }
|
|
371
|
+
}];
|
|
372
|
+
};
|
|
373
|
+
/**
|
|
374
|
+
* Reduced-input YOLO26 variants (2026-07-11). A lower square input (320 / 256)
|
|
375
|
+
* is the biggest, cheapest latency lever measured across every runtime — Mac
|
|
376
|
+
* ANE, Intel Ultra NPU, and especially the N100 — at a small-object accuracy
|
|
377
|
+
* cost. Each resolution ships a base (fp32) entry (onnx + coreml + openvino)
|
|
378
|
+
* grouped under `{family, tier, resolution}`, plus an OpenVINO INT8 entry (best
|
|
379
|
+
* on Intel/N100) grouped with `precision:'int8'`. The grouped selector surfaces
|
|
380
|
+
* `resolution` as a variant axis alongside precision.
|
|
381
|
+
*
|
|
382
|
+
* Intel NPU (OpenVINO 2025.4, measured 2026-10-07): every YOLO26 IR compiles
|
|
383
|
+
* and runs. The base IRs are as accurate as the CPU; the INT8 IRs lose recall
|
|
384
|
+
* there (`yolo26s-int8` 0.58 on the NPU vs 0.70 on CPU/iGPU, `yolo26m-int8`
|
|
385
|
+
* 0.78 vs 0.83), so on an NPU the base IR is the one to run.
|
|
386
|
+
*/
|
|
387
|
+
var yolo26Reduced = (tier, res, sizes) => {
|
|
388
|
+
const name = YOLO26_TIER_NAME[tier] ?? tier.toUpperCase();
|
|
389
|
+
return [{
|
|
390
|
+
id: `yolo26${tier}-${res}`,
|
|
391
|
+
group: {
|
|
392
|
+
family: "yolo26",
|
|
393
|
+
tier,
|
|
394
|
+
resolution: res
|
|
395
|
+
},
|
|
396
|
+
name: `YOLO26 ${name} @${res}`,
|
|
397
|
+
description: `YOLO26 ${name}, reduced ${res}×${res} input — faster on ANE / hub NPU / N100 at a small-object accuracy cost`,
|
|
398
|
+
inputSize: {
|
|
399
|
+
width: res,
|
|
400
|
+
height: res
|
|
401
|
+
},
|
|
402
|
+
labels: [],
|
|
403
|
+
preprocessMode: "letterbox",
|
|
404
|
+
license: licensed(ULTRALYTICS_AGPL, { modifications: `re-exported at ${res}×${res} to ONNX, OpenVINO IR and CoreML` }),
|
|
405
|
+
formats: {
|
|
406
|
+
onnx: {
|
|
407
|
+
url: hf(`objectDetection/yolo26/onnx/camstack-yolo26${tier}-${res}.onnx`),
|
|
408
|
+
sizeMB: sizes.onnx
|
|
409
|
+
},
|
|
410
|
+
coreml: {
|
|
411
|
+
url: hf(`objectDetection/yolo26/coreml/camstack-yolo26${tier}-${res}.mlpackage`),
|
|
412
|
+
sizeMB: sizes.coreml,
|
|
413
|
+
isDirectory: true,
|
|
414
|
+
files: [...MLPACKAGE_FILES],
|
|
415
|
+
runtimes: ["python"]
|
|
416
|
+
},
|
|
417
|
+
openvino: ovFormat(hf(`objectDetection/yolo26/openvino/camstack-yolo26${tier}-${res}.xml`), sizes.ovFp32)
|
|
418
|
+
}
|
|
419
|
+
}, {
|
|
420
|
+
id: `yolo26${tier}-${res}-int8`,
|
|
421
|
+
group: {
|
|
422
|
+
family: "yolo26",
|
|
423
|
+
tier,
|
|
424
|
+
precision: "int8",
|
|
425
|
+
resolution: res
|
|
426
|
+
},
|
|
427
|
+
name: `YOLO26 ${name} @${res} (INT8)`,
|
|
428
|
+
description: `YOLO26 ${name} @${res} — OpenVINO INT8 for Intel iGPU/CPU; the N100's fastest config. On the Intel NPU it loses recall — use the base model there`,
|
|
429
|
+
inputSize: {
|
|
430
|
+
width: res,
|
|
431
|
+
height: res
|
|
432
|
+
},
|
|
433
|
+
labels: [],
|
|
434
|
+
preprocessMode: "letterbox",
|
|
435
|
+
license: licensed(ULTRALYTICS_AGPL, { modifications: `re-exported at ${res}×${res} to OpenVINO IR; OpenVINO NNCF INT8 post-training quantisation` }),
|
|
436
|
+
formats: { openvino: ovFormat(hf(`objectDetection/yolo26/openvino/camstack-yolo26${tier}-${res}-int8.xml`), sizes.ovInt8) }
|
|
437
|
+
}];
|
|
438
|
+
};
|
|
439
|
+
/** Variant family of the YOLO26 builds with an instance-segmentation head. */
|
|
440
|
+
var YOLO26_SEG_FAMILY = "yolo26-seg";
|
|
441
|
+
/** What choosing a seg build as the root means, in the catalog's own words. */
|
|
442
|
+
var YOLO26_SEG_ROOT_NOTE = "As the root model it detects like YOLO26 and also supplies the Segmentation step its masks (detection + masks, slightly heavier).";
|
|
443
|
+
var OBJECT_DETECTION_MODEL_ENTRIES = [
|
|
444
|
+
{
|
|
445
|
+
id: "yolo26n",
|
|
446
|
+
license: ULTRALYTICS_AGPL,
|
|
447
|
+
group: {
|
|
448
|
+
family: "yolo26",
|
|
449
|
+
tier: "n",
|
|
450
|
+
resolution: 640
|
|
451
|
+
},
|
|
452
|
+
name: "YOLO26 Nano",
|
|
453
|
+
description: "YOLO26 Nano — latest generation ultra-lightweight detector with attention mechanism",
|
|
454
|
+
inputSize: {
|
|
455
|
+
width: 640,
|
|
456
|
+
height: 640
|
|
457
|
+
},
|
|
458
|
+
labels: [],
|
|
459
|
+
preprocessMode: "letterbox",
|
|
460
|
+
formats: {
|
|
461
|
+
onnx: {
|
|
462
|
+
url: hf("objectDetection/yolo26/onnx/camstack-yolo26n.onnx"),
|
|
463
|
+
sizeMB: 10
|
|
464
|
+
},
|
|
465
|
+
coreml: {
|
|
466
|
+
url: hf("objectDetection/yolo26/coreml/camstack-yolo26n.mlpackage"),
|
|
467
|
+
sizeMB: 5,
|
|
468
|
+
isDirectory: true,
|
|
469
|
+
files: [...MLPACKAGE_FILES],
|
|
470
|
+
runtimes: ["python"]
|
|
471
|
+
},
|
|
472
|
+
openvino: ovFormat(hf("objectDetection/yolo26/openvino/camstack-yolo26n.xml"), 9)
|
|
473
|
+
}
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
id: "yolo26s",
|
|
477
|
+
license: ULTRALYTICS_AGPL,
|
|
478
|
+
group: {
|
|
479
|
+
family: "yolo26",
|
|
480
|
+
tier: "s",
|
|
481
|
+
resolution: 640
|
|
482
|
+
},
|
|
483
|
+
name: "YOLO26 Small",
|
|
484
|
+
description: "YOLO26 Small — balanced speed/accuracy with attention-based architecture",
|
|
485
|
+
inputSize: {
|
|
486
|
+
width: 640,
|
|
487
|
+
height: 640
|
|
488
|
+
},
|
|
489
|
+
labels: [],
|
|
490
|
+
preprocessMode: "letterbox",
|
|
491
|
+
formats: {
|
|
492
|
+
onnx: {
|
|
493
|
+
url: hf("objectDetection/yolo26/onnx/camstack-yolo26s.onnx"),
|
|
494
|
+
sizeMB: 37
|
|
495
|
+
},
|
|
496
|
+
coreml: {
|
|
497
|
+
url: hf("objectDetection/yolo26/coreml/camstack-yolo26s.mlpackage"),
|
|
498
|
+
sizeMB: 18,
|
|
499
|
+
isDirectory: true,
|
|
500
|
+
files: [...MLPACKAGE_FILES],
|
|
501
|
+
runtimes: ["python"]
|
|
502
|
+
},
|
|
503
|
+
openvino: ovFormat(hf("objectDetection/yolo26/openvino/camstack-yolo26s.xml"), 36)
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
id: "yolo26m",
|
|
508
|
+
license: ULTRALYTICS_AGPL,
|
|
509
|
+
group: {
|
|
510
|
+
family: "yolo26",
|
|
511
|
+
tier: "m",
|
|
512
|
+
resolution: 640
|
|
513
|
+
},
|
|
514
|
+
name: "YOLO26 Medium",
|
|
515
|
+
description: "YOLO26 Medium — high accuracy general-purpose detector",
|
|
516
|
+
inputSize: {
|
|
517
|
+
width: 640,
|
|
518
|
+
height: 640
|
|
519
|
+
},
|
|
520
|
+
labels: [],
|
|
521
|
+
preprocessMode: "letterbox",
|
|
522
|
+
formats: {
|
|
523
|
+
onnx: {
|
|
524
|
+
url: hf("objectDetection/yolo26/onnx/camstack-yolo26m.onnx"),
|
|
525
|
+
sizeMB: 78
|
|
526
|
+
},
|
|
527
|
+
coreml: {
|
|
528
|
+
url: hf("objectDetection/yolo26/coreml/camstack-yolo26m.mlpackage"),
|
|
529
|
+
sizeMB: 39,
|
|
530
|
+
isDirectory: true,
|
|
531
|
+
files: [...MLPACKAGE_FILES],
|
|
532
|
+
runtimes: ["python"]
|
|
533
|
+
},
|
|
534
|
+
openvino: ovFormat(hf("objectDetection/yolo26/openvino/camstack-yolo26m.xml"), 78)
|
|
535
|
+
}
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
id: "yolo26l",
|
|
539
|
+
license: ULTRALYTICS_AGPL,
|
|
540
|
+
group: {
|
|
541
|
+
family: "yolo26",
|
|
542
|
+
tier: "l",
|
|
543
|
+
resolution: 640
|
|
544
|
+
},
|
|
545
|
+
name: "YOLO26 Large",
|
|
546
|
+
description: "YOLO26 Large — maximum accuracy for demanding deployments",
|
|
547
|
+
inputSize: {
|
|
548
|
+
width: 640,
|
|
549
|
+
height: 640
|
|
550
|
+
},
|
|
551
|
+
labels: [],
|
|
552
|
+
preprocessMode: "letterbox",
|
|
553
|
+
formats: {
|
|
554
|
+
onnx: {
|
|
555
|
+
url: hf("objectDetection/yolo26/onnx/camstack-yolo26l.onnx"),
|
|
556
|
+
sizeMB: 95
|
|
557
|
+
},
|
|
558
|
+
coreml: {
|
|
559
|
+
url: hf("objectDetection/yolo26/coreml/camstack-yolo26l.mlpackage"),
|
|
560
|
+
sizeMB: 48,
|
|
561
|
+
isDirectory: true,
|
|
562
|
+
files: [...MLPACKAGE_FILES],
|
|
563
|
+
runtimes: ["python"]
|
|
564
|
+
},
|
|
565
|
+
openvino: ovFormat(hf("objectDetection/yolo26/openvino/camstack-yolo26l.xml"), 95)
|
|
566
|
+
}
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
id: "yolo26x",
|
|
570
|
+
license: ULTRALYTICS_AGPL,
|
|
571
|
+
legacy: true,
|
|
572
|
+
name: "YOLO26 XLarge",
|
|
573
|
+
description: "YOLO26 XLarge — highest accuracy, attention-based architecture",
|
|
574
|
+
inputSize: {
|
|
575
|
+
width: 640,
|
|
576
|
+
height: 640
|
|
577
|
+
},
|
|
578
|
+
labels: [],
|
|
579
|
+
preprocessMode: "letterbox",
|
|
580
|
+
formats: {
|
|
581
|
+
onnx: {
|
|
582
|
+
url: hf("objectDetection/yolo26/onnx/camstack-yolo26x.onnx"),
|
|
583
|
+
sizeMB: 213
|
|
584
|
+
},
|
|
585
|
+
coreml: {
|
|
586
|
+
url: hf("objectDetection/yolo26/coreml/camstack-yolo26x.mlpackage"),
|
|
587
|
+
sizeMB: 107,
|
|
588
|
+
isDirectory: true,
|
|
589
|
+
files: [...MLPACKAGE_FILES],
|
|
590
|
+
runtimes: ["python"]
|
|
591
|
+
},
|
|
592
|
+
openvino: ovFormat(hf("objectDetection/yolo26/openvino/camstack-yolo26x.xml"), 213)
|
|
593
|
+
}
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
id: "ssd-mobilenet-v2-coco-edgetpu",
|
|
597
|
+
license: CORAL_COCO_APACHE,
|
|
598
|
+
name: "SSD MobileNet V2 (Coral)",
|
|
599
|
+
description: "SSD MobileNet V2 COCO — EdgeTPU-compiled full-integer TFLite, 300×300; runs on the Coral USB Edge TPU (~11 ms/frame)",
|
|
600
|
+
inputSize: {
|
|
601
|
+
width: 300,
|
|
602
|
+
height: 300
|
|
603
|
+
},
|
|
604
|
+
labels: [],
|
|
605
|
+
preprocessMode: "letterbox",
|
|
606
|
+
postprocessor: "ssd",
|
|
607
|
+
formats: { tflite: {
|
|
608
|
+
url: "https://github.com/google-coral/test_data/raw/master/ssd_mobilenet_v2_coco_quant_postprocess_edgetpu.tflite",
|
|
609
|
+
sizeMB: 6.6,
|
|
610
|
+
runtimes: ["python"]
|
|
611
|
+
} }
|
|
612
|
+
},
|
|
613
|
+
{
|
|
614
|
+
id: "yolo26n-seg",
|
|
615
|
+
license: licensed(ULTRALYTICS_AGPL, { modifications: "exported to ONNX, OpenVINO IR and CoreML" }),
|
|
616
|
+
group: {
|
|
617
|
+
family: YOLO26_SEG_FAMILY,
|
|
618
|
+
tier: "n",
|
|
619
|
+
resolution: 640
|
|
620
|
+
},
|
|
621
|
+
name: "YOLO26-seg Nano",
|
|
622
|
+
description: `YOLO26 Nano with its instance-segmentation head — ultra-lightweight. ${YOLO26_SEG_ROOT_NOTE}`,
|
|
623
|
+
inputSize: {
|
|
624
|
+
width: 640,
|
|
625
|
+
height: 640
|
|
626
|
+
},
|
|
627
|
+
labels: [],
|
|
628
|
+
preprocessMode: "letterbox",
|
|
629
|
+
postprocessor: "yolo-seg",
|
|
630
|
+
formats: {
|
|
631
|
+
onnx: {
|
|
632
|
+
url: hf("segmentation/yolo26-seg/onnx/camstack-yolo26n-seg.onnx"),
|
|
633
|
+
sizeMB: 11
|
|
634
|
+
},
|
|
635
|
+
coreml: {
|
|
636
|
+
url: hf("segmentation/yolo26-seg/coreml/camstack-yolo26n-seg.mlpackage"),
|
|
637
|
+
sizeMB: 6,
|
|
638
|
+
isDirectory: true,
|
|
639
|
+
files: [...MLPACKAGE_FILES],
|
|
640
|
+
runtimes: ["python"]
|
|
641
|
+
},
|
|
642
|
+
openvino: ovFormat(hf("segmentation/yolo26-seg/openvino/camstack-yolo26n-seg.xml"), 11)
|
|
643
|
+
}
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
id: "yolo26s-seg",
|
|
647
|
+
license: licensed(ULTRALYTICS_AGPL, { modifications: "exported to ONNX, OpenVINO IR and CoreML" }),
|
|
648
|
+
group: {
|
|
649
|
+
family: YOLO26_SEG_FAMILY,
|
|
650
|
+
tier: "s",
|
|
651
|
+
resolution: 640
|
|
652
|
+
},
|
|
653
|
+
name: "YOLO26-seg Small",
|
|
654
|
+
description: `YOLO26 Small with its instance-segmentation head — balanced. ${YOLO26_SEG_ROOT_NOTE}`,
|
|
655
|
+
inputSize: {
|
|
656
|
+
width: 640,
|
|
657
|
+
height: 640
|
|
658
|
+
},
|
|
659
|
+
labels: [],
|
|
660
|
+
preprocessMode: "letterbox",
|
|
661
|
+
postprocessor: "yolo-seg",
|
|
662
|
+
formats: {
|
|
663
|
+
onnx: {
|
|
664
|
+
url: hf("segmentation/yolo26-seg/onnx/camstack-yolo26s-seg.onnx"),
|
|
665
|
+
sizeMB: 40
|
|
666
|
+
},
|
|
667
|
+
coreml: {
|
|
668
|
+
url: hf("segmentation/yolo26-seg/coreml/camstack-yolo26s-seg.mlpackage"),
|
|
669
|
+
sizeMB: 20,
|
|
670
|
+
isDirectory: true,
|
|
671
|
+
files: [...MLPACKAGE_FILES],
|
|
672
|
+
runtimes: ["python"]
|
|
673
|
+
},
|
|
674
|
+
openvino: ovFormat(hf("segmentation/yolo26-seg/openvino/camstack-yolo26s-seg.xml"), 40)
|
|
675
|
+
}
|
|
676
|
+
},
|
|
677
|
+
{
|
|
678
|
+
id: "yolo26m-seg",
|
|
679
|
+
license: licensed(ULTRALYTICS_AGPL, { modifications: "exported to ONNX, OpenVINO IR and CoreML" }),
|
|
680
|
+
group: {
|
|
681
|
+
family: YOLO26_SEG_FAMILY,
|
|
682
|
+
tier: "m",
|
|
683
|
+
resolution: 640
|
|
684
|
+
},
|
|
685
|
+
name: "YOLO26-seg Medium",
|
|
686
|
+
description: `YOLO26 Medium with its instance-segmentation head — high accuracy. ${YOLO26_SEG_ROOT_NOTE}`,
|
|
687
|
+
inputSize: {
|
|
688
|
+
width: 640,
|
|
689
|
+
height: 640
|
|
690
|
+
},
|
|
691
|
+
labels: [],
|
|
692
|
+
preprocessMode: "letterbox",
|
|
693
|
+
postprocessor: "yolo-seg",
|
|
694
|
+
formats: {
|
|
695
|
+
onnx: {
|
|
696
|
+
url: hf("segmentation/yolo26-seg/onnx/camstack-yolo26m-seg.onnx"),
|
|
697
|
+
sizeMB: 90
|
|
698
|
+
},
|
|
699
|
+
coreml: {
|
|
700
|
+
url: hf("segmentation/yolo26-seg/coreml/camstack-yolo26m-seg.mlpackage"),
|
|
701
|
+
sizeMB: 45,
|
|
702
|
+
isDirectory: true,
|
|
703
|
+
files: [...MLPACKAGE_FILES],
|
|
704
|
+
runtimes: ["python"]
|
|
705
|
+
},
|
|
706
|
+
openvino: ovFormat(hf("segmentation/yolo26-seg/openvino/camstack-yolo26m-seg.xml"), 90)
|
|
707
|
+
}
|
|
708
|
+
},
|
|
709
|
+
ovPrecisionVariant("yolo26n", "objectDetection/yolo26/openvino", "YOLO26 Nano", "fp16", 5, true),
|
|
710
|
+
ovPrecisionVariant("yolo26n", "objectDetection/yolo26/openvino", "YOLO26 Nano", "int8", 3),
|
|
711
|
+
ovPrecisionVariant("yolo26s", "objectDetection/yolo26/openvino", "YOLO26 Small", "fp16", 19, true),
|
|
712
|
+
ovPrecisionVariant("yolo26s", "objectDetection/yolo26/openvino", "YOLO26 Small", "int8", 10),
|
|
713
|
+
ovPrecisionVariant("yolo26m", "objectDetection/yolo26/openvino", "YOLO26 Medium", "fp16", 41, true),
|
|
714
|
+
ovPrecisionVariant("yolo26m", "objectDetection/yolo26/openvino", "YOLO26 Medium", "int8", 21),
|
|
715
|
+
ovPrecisionVariant("yolo26l", "objectDetection/yolo26/openvino", "YOLO26 Large", "fp16", 50, true),
|
|
716
|
+
ovPrecisionVariant("yolo26l", "objectDetection/yolo26/openvino", "YOLO26 Large", "int8", 25),
|
|
717
|
+
...yolo26Reduced("n", 320, {
|
|
718
|
+
onnx: 10.47,
|
|
719
|
+
coreml: 5.05,
|
|
720
|
+
ovFp32: 10.05,
|
|
721
|
+
ovInt8: 3.29
|
|
722
|
+
}),
|
|
723
|
+
...yolo26Reduced("n", 256, {
|
|
724
|
+
onnx: 10.47,
|
|
725
|
+
coreml: 5.05,
|
|
726
|
+
ovFp32: 10.05,
|
|
727
|
+
ovInt8: 3.29
|
|
728
|
+
}),
|
|
729
|
+
...yolo26Reduced("s", 320, {
|
|
730
|
+
onnx: 38.82,
|
|
731
|
+
coreml: 19.23,
|
|
732
|
+
ovFp32: 38.4,
|
|
733
|
+
ovInt8: 10.43
|
|
734
|
+
}),
|
|
735
|
+
...yolo26Reduced("s", 256, {
|
|
736
|
+
onnx: 38.82,
|
|
737
|
+
coreml: 19.23,
|
|
738
|
+
ovFp32: 38.4,
|
|
739
|
+
ovInt8: 10.43
|
|
740
|
+
}),
|
|
741
|
+
...yolo26Reduced("m", 320, {
|
|
742
|
+
onnx: 83.31,
|
|
743
|
+
coreml: 41.07,
|
|
744
|
+
ovFp32: 82.09,
|
|
745
|
+
ovInt8: 21.47
|
|
746
|
+
}),
|
|
747
|
+
...yolo26Reduced("m", 256, {
|
|
748
|
+
onnx: 83.31,
|
|
749
|
+
coreml: 41.07,
|
|
750
|
+
ovFp32: 82.09,
|
|
751
|
+
ovInt8: 21.47
|
|
752
|
+
}),
|
|
753
|
+
...yolo26Reduced("l", 320, {
|
|
754
|
+
onnx: 101.74,
|
|
755
|
+
coreml: 49.97,
|
|
756
|
+
ovFp32: 99.85,
|
|
757
|
+
ovInt8: 26.31
|
|
758
|
+
}),
|
|
759
|
+
...yolo26Reduced("l", 256, {
|
|
760
|
+
onnx: 101.74,
|
|
761
|
+
coreml: 49.97,
|
|
762
|
+
ovFp32: 99.85,
|
|
763
|
+
ovInt8: 26.31
|
|
764
|
+
}),
|
|
765
|
+
...yolov9Reduced("t", 320, {
|
|
766
|
+
onnx: 8,
|
|
767
|
+
coreml: 4.3,
|
|
768
|
+
ovFp16: 4,
|
|
769
|
+
ovInt8: 3
|
|
770
|
+
}),
|
|
771
|
+
...yolov9Reduced("t", 640, {
|
|
772
|
+
onnx: 8,
|
|
773
|
+
coreml: 4.4,
|
|
774
|
+
ovFp16: 4,
|
|
775
|
+
ovInt8: 3
|
|
776
|
+
}),
|
|
777
|
+
...yolov9Reduced("s", 320, {
|
|
778
|
+
onnx: 27,
|
|
779
|
+
coreml: 14.1,
|
|
780
|
+
ovFp16: 14,
|
|
781
|
+
ovInt8: 8
|
|
782
|
+
}),
|
|
783
|
+
...yolov9Reduced("s", 640, {
|
|
784
|
+
onnx: 27,
|
|
785
|
+
coreml: 14.1,
|
|
786
|
+
ovFp16: 14,
|
|
787
|
+
ovInt8: 8
|
|
788
|
+
}),
|
|
789
|
+
...yolov9Reduced("m", 320, {
|
|
790
|
+
onnx: 76,
|
|
791
|
+
coreml: 38.6,
|
|
792
|
+
ovFp16: 38,
|
|
793
|
+
ovInt8: 20
|
|
794
|
+
}),
|
|
795
|
+
...yolov9Reduced("m", 640, {
|
|
796
|
+
onnx: 76,
|
|
797
|
+
coreml: 38.6,
|
|
798
|
+
ovFp16: 38,
|
|
799
|
+
ovInt8: 20
|
|
800
|
+
}),
|
|
801
|
+
...yolov9Reduced("c", 320, {
|
|
802
|
+
onnx: 97,
|
|
803
|
+
coreml: 48.7,
|
|
804
|
+
ovFp16: 49,
|
|
805
|
+
ovInt8: 25
|
|
806
|
+
}),
|
|
807
|
+
...yolov9Reduced("c", 640, {
|
|
808
|
+
onnx: 97,
|
|
809
|
+
coreml: 48.7,
|
|
810
|
+
ovFp16: 49,
|
|
811
|
+
ovInt8: 25
|
|
812
|
+
}),
|
|
813
|
+
ovPrecisionVariant("yolo26x", "objectDetection/yolo26/openvino", "YOLO26 XLarge", "fp16", 112, true),
|
|
814
|
+
ovPrecisionVariant("yolo26x", "objectDetection/yolo26/openvino", "YOLO26 XLarge", "int8", 56, true)
|
|
815
|
+
];
|
|
816
|
+
/**
|
|
817
|
+
* The per-class confidence-floor DEFAULTS of each object-detection model
|
|
818
|
+
* (D738), keyed by model id. Applied onto the catalog entries below as
|
|
819
|
+
* `defaultClassFloors`; this is the ONLY place a model's floor is written. A
|
|
820
|
+
* model absent here runs at the step slider's global default
|
|
821
|
+
* (`ObjectDetectionStep.getConfigSchema`: person 0.65, vehicle 0.50, animal
|
|
822
|
+
* 0.50).
|
|
823
|
+
*
|
|
824
|
+
* Measured 2026-10-07 (`docs/benchmarks/model-floors.json`, which also holds
|
|
825
|
+
* precision/recall per class): the floor is the lowest score at which the model
|
|
826
|
+
* makes no more false positives than the production root (`yolov9m-320-int8` at
|
|
827
|
+
* 0.65 / 0.50 / 0.50) on the same 409 hub frames, against an ensemble
|
|
828
|
+
* pseudo-ground-truth, rounded to 0.05, minimum 0.25. Floors carry about
|
|
829
|
+
* +/-0.05-0.10 of noise. Where a floor hinges on a single high-score false
|
|
830
|
+
* positive, the next-lower value the measurement gives is used instead (marked
|
|
831
|
+
* below). A re-measurement replaces the JSON and these rows together; a spec
|
|
832
|
+
* holds them equal.
|
|
833
|
+
*
|
|
834
|
+
* `package` is not calibrated (7 objects in the set) and stays at its global
|
|
835
|
+
* default. Every catalog model NOT listed here (the 256 builds, yolo26 l/x,
|
|
836
|
+
* the seg builds, the fp16 legacy IRs) is untuned and runs at the global
|
|
837
|
+
* defaults.
|
|
838
|
+
*/
|
|
839
|
+
var OBJECT_DETECTION_CLASS_FLOORS = {
|
|
840
|
+
"ssd-mobilenet-v2-coco-edgetpu": {
|
|
841
|
+
person: .6,
|
|
842
|
+
vehicle: .35,
|
|
843
|
+
animal: .4
|
|
844
|
+
},
|
|
845
|
+
yolo26m: {
|
|
846
|
+
person: .4,
|
|
847
|
+
vehicle: .25,
|
|
848
|
+
animal: .3
|
|
849
|
+
},
|
|
850
|
+
"yolo26m-320": {
|
|
851
|
+
person: .7,
|
|
852
|
+
vehicle: .3,
|
|
853
|
+
animal: .4
|
|
854
|
+
},
|
|
855
|
+
"yolo26m-320-int8": {
|
|
856
|
+
person: .6,
|
|
857
|
+
vehicle: .4,
|
|
858
|
+
animal: .3
|
|
859
|
+
},
|
|
860
|
+
"yolo26m-int8": {
|
|
861
|
+
person: .4,
|
|
862
|
+
vehicle: .35,
|
|
863
|
+
animal: .45
|
|
864
|
+
},
|
|
865
|
+
yolo26n: {
|
|
866
|
+
person: .65,
|
|
867
|
+
vehicle: .4,
|
|
868
|
+
animal: .5
|
|
869
|
+
},
|
|
870
|
+
"yolo26n-320": {
|
|
871
|
+
person: .6,
|
|
872
|
+
vehicle: .6,
|
|
873
|
+
animal: .4
|
|
874
|
+
},
|
|
875
|
+
"yolo26n-320-int8": {
|
|
876
|
+
person: .45,
|
|
877
|
+
vehicle: .55,
|
|
878
|
+
animal: .35
|
|
879
|
+
},
|
|
880
|
+
"yolo26n-int8": {
|
|
881
|
+
person: .55,
|
|
882
|
+
vehicle: .3,
|
|
883
|
+
animal: .4
|
|
884
|
+
},
|
|
885
|
+
yolo26s: {
|
|
886
|
+
person: .4,
|
|
887
|
+
vehicle: .45,
|
|
888
|
+
animal: .4
|
|
889
|
+
},
|
|
890
|
+
"yolo26s-320": {
|
|
891
|
+
person: .6,
|
|
892
|
+
vehicle: .45,
|
|
893
|
+
animal: .45
|
|
894
|
+
},
|
|
895
|
+
"yolo26s-320-int8": {
|
|
896
|
+
person: .5,
|
|
897
|
+
vehicle: .55,
|
|
898
|
+
animal: .45
|
|
899
|
+
},
|
|
900
|
+
"yolo26s-int8": {
|
|
901
|
+
person: .4,
|
|
902
|
+
vehicle: .3,
|
|
903
|
+
animal: .4
|
|
904
|
+
},
|
|
905
|
+
"yolov9c-320": {
|
|
906
|
+
person: .7,
|
|
907
|
+
vehicle: .45,
|
|
908
|
+
animal: .45
|
|
909
|
+
},
|
|
910
|
+
"yolov9c-320-int8": {
|
|
911
|
+
person: .7,
|
|
912
|
+
vehicle: .5,
|
|
913
|
+
animal: .25
|
|
914
|
+
},
|
|
915
|
+
"yolov9c-640": {
|
|
916
|
+
person: .55,
|
|
917
|
+
vehicle: .45,
|
|
918
|
+
animal: .3
|
|
919
|
+
},
|
|
920
|
+
"yolov9c-640-int8": {
|
|
921
|
+
person: .45,
|
|
922
|
+
vehicle: .4,
|
|
923
|
+
animal: .3
|
|
924
|
+
},
|
|
925
|
+
"yolov9m-320": {
|
|
926
|
+
person: .7,
|
|
927
|
+
vehicle: .5,
|
|
928
|
+
animal: .55
|
|
929
|
+
},
|
|
930
|
+
"yolov9m-320-int8": {
|
|
931
|
+
person: .65,
|
|
932
|
+
vehicle: .4,
|
|
933
|
+
animal: .45
|
|
934
|
+
},
|
|
935
|
+
"yolov9m-640": {
|
|
936
|
+
person: .6,
|
|
937
|
+
vehicle: .4,
|
|
938
|
+
animal: .55
|
|
939
|
+
},
|
|
940
|
+
"yolov9m-640-int8": {
|
|
941
|
+
person: .55,
|
|
942
|
+
vehicle: .4,
|
|
943
|
+
animal: .7
|
|
944
|
+
},
|
|
945
|
+
"yolov9s-320": {
|
|
946
|
+
person: .7,
|
|
947
|
+
vehicle: .55,
|
|
948
|
+
animal: .4
|
|
949
|
+
},
|
|
950
|
+
"yolov9s-320-int8": {
|
|
951
|
+
person: .7,
|
|
952
|
+
vehicle: .45,
|
|
953
|
+
animal: .4
|
|
954
|
+
},
|
|
955
|
+
"yolov9s-640": {
|
|
956
|
+
person: .7,
|
|
957
|
+
vehicle: .4,
|
|
958
|
+
animal: .6
|
|
959
|
+
},
|
|
960
|
+
"yolov9s-640-int8": {
|
|
961
|
+
person: .5,
|
|
962
|
+
vehicle: .3,
|
|
963
|
+
animal: .55
|
|
964
|
+
},
|
|
965
|
+
"yolov9t-320": {
|
|
966
|
+
person: .55,
|
|
967
|
+
vehicle: .45,
|
|
968
|
+
animal: .3
|
|
969
|
+
},
|
|
970
|
+
"yolov9t-320-int8": {
|
|
971
|
+
person: .55,
|
|
972
|
+
vehicle: .4,
|
|
973
|
+
animal: .3
|
|
974
|
+
},
|
|
975
|
+
"yolov9t-640": {
|
|
976
|
+
person: .65,
|
|
977
|
+
vehicle: .5,
|
|
978
|
+
animal: .5
|
|
979
|
+
},
|
|
980
|
+
"yolov9t-640-int8": {
|
|
981
|
+
person: .6,
|
|
982
|
+
vehicle: .55,
|
|
983
|
+
animal: .55
|
|
984
|
+
}
|
|
985
|
+
};
|
|
986
|
+
/**
|
|
987
|
+
* The floor on the DETECTION score below which a root detector's own fine
|
|
988
|
+
* label (a species, a vehicle type — the D736 root supply) is not taken (D741).
|
|
989
|
+
* Keyed by root model, then by the supplied step. Below it the detection keeps
|
|
990
|
+
* its macro class with no fine label; it is never dropped. A floor of 1 means
|
|
991
|
+
* "never take this label from this root". A root or step absent here has no
|
|
992
|
+
* extra floor — the macro floor alone gates the label, as before D741.
|
|
993
|
+
*
|
|
994
|
+
* Measured 2026-10-07 (`docs/benchmarks/classifier-floors.json`): the
|
|
995
|
+
* lowest detection score from which the root's species was right ~90% of the
|
|
996
|
+
* time, against a two-model zero-shot reference on 219 animal crops dominated
|
|
997
|
+
* by one dog. Unlisted roots behave alike — ~0.89-0.90 at the macro floor for
|
|
998
|
+
* 640 roots, ~0.74 for 320 roots. Vehicle types needed no extra floor on any
|
|
999
|
+
* root (0.99-1.00 at the macro floor). The Coral SSD named the species wrongly
|
|
1000
|
+
* three times in four.
|
|
1001
|
+
*/
|
|
1002
|
+
var ROOT_SUPPLIED_LABEL_FLOORS = {
|
|
1003
|
+
"yolov9m-320-int8": { "animal-classifier": .75 },
|
|
1004
|
+
"yolov9m-640-int8": { "animal-classifier": .7 },
|
|
1005
|
+
"yolov9c-640-int8": { "animal-classifier": .75 },
|
|
1006
|
+
yolo26s: { "animal-classifier": .45 },
|
|
1007
|
+
yolo26m: { "animal-classifier": .7 },
|
|
1008
|
+
"yolo26s-int8": { "animal-classifier": .55 },
|
|
1009
|
+
"ssd-mobilenet-v2-coco-edgetpu": { "animal-classifier": 1 }
|
|
1010
|
+
};
|
|
1011
|
+
/** Stamp each entry's row of `floors` on it as `suppliedLabelFloors`. Fresh objects only. */
|
|
1012
|
+
function withSuppliedLabelFloors(entries, floors) {
|
|
1013
|
+
return entries.map((entry) => {
|
|
1014
|
+
const row = floors[entry.id];
|
|
1015
|
+
return row === void 0 ? entry : {
|
|
1016
|
+
...entry,
|
|
1017
|
+
suppliedLabelFloors: { ...row }
|
|
1018
|
+
};
|
|
1019
|
+
});
|
|
1020
|
+
}
|
|
1021
|
+
/** Stamp each entry's row of `floors` on it as `defaultClassFloors`. Fresh objects only. */
|
|
1022
|
+
function withDefaultClassFloors(entries, floors) {
|
|
1023
|
+
return entries.map((entry) => {
|
|
1024
|
+
const row = floors[entry.id];
|
|
1025
|
+
return row === void 0 ? entry : {
|
|
1026
|
+
...entry,
|
|
1027
|
+
defaultClassFloors: { ...row }
|
|
1028
|
+
};
|
|
1029
|
+
});
|
|
1030
|
+
}
|
|
1031
|
+
/**
|
|
1032
|
+
* Object-detection IRs that need f32 inference on an Intel GPU
|
|
1033
|
+
* (`gpuInferencePrecision`). At the GPU's default f16 the YOLO26 FP32 IRs of
|
|
1034
|
+
* the larger tiers return no valid detection — measured 2026-10-07 on the Core
|
|
1035
|
+
* Ultra iGPU and the N100: `yolo26s` (640) 0 true / 146 false positives,
|
|
1036
|
+
* `yolo26m` and `yolo26m-320` NaN scores; at f32 they match the CPU, at ~60%
|
|
1037
|
+
* more GPU latency. `yolo26n`, `yolo26n-320` and `yolo26s-320` were measured
|
|
1038
|
+
* correct at f16 and are NOT listed. The rest of the list is the same pattern
|
|
1039
|
+
* not yet measured (tier m / l / x at any input, tier s at 640, the seg builds
|
|
1040
|
+
* of those tiers): f32 costs latency, f16 risks a detector that silently finds
|
|
1041
|
+
* nothing. INT8 IRs and every YOLOv9 IR are correct at the device default.
|
|
1042
|
+
*/
|
|
1043
|
+
var OPENVINO_GPU_F32_MODEL_IDS = new Set([
|
|
1044
|
+
"yolo26s",
|
|
1045
|
+
"yolo26m",
|
|
1046
|
+
"yolo26m-320",
|
|
1047
|
+
"yolo26m-256",
|
|
1048
|
+
"yolo26l",
|
|
1049
|
+
"yolo26l-320",
|
|
1050
|
+
"yolo26l-256",
|
|
1051
|
+
"yolo26x",
|
|
1052
|
+
"yolo26s-seg",
|
|
1053
|
+
"yolo26m-seg"
|
|
1054
|
+
]);
|
|
1055
|
+
/** Stamp `gpuInferencePrecision: 'f32'` on the listed entries. Fresh objects only. */
|
|
1056
|
+
function withGpuF32(entries, ids) {
|
|
1057
|
+
return entries.map((entry) => ids.has(entry.id) ? {
|
|
1058
|
+
...entry,
|
|
1059
|
+
gpuInferencePrecision: "f32"
|
|
1060
|
+
} : entry);
|
|
1061
|
+
}
|
|
1062
|
+
[...OPENVINO_GPU_F32_MODEL_IDS];
|
|
1063
|
+
var OBJECT_DETECTION_MODELS = withSuppliedLabelFloors(withGpuF32(withDefaultClassFloors(OBJECT_DETECTION_MODEL_ENTRIES, OBJECT_DETECTION_CLASS_FLOORS), OPENVINO_GPU_F32_MODEL_IDS), ROOT_SUPPLIED_LABEL_FLOORS);
|
|
1064
|
+
var FACE_DETECTION_MODELS = [{
|
|
1065
|
+
id: "yunet-2023mar",
|
|
1066
|
+
license: YUNET_MIT,
|
|
1067
|
+
name: "YuNet 2023mar",
|
|
1068
|
+
description: "YuNet (OpenCV Zoo, 2023mar) — tiny face detector with 5 keypoints, MIT weights (WIDER FACE AP 0.884/0.866/0.750). ~0.2 MB. Trained on WIDER FACE (CC BY-NC-ND images).",
|
|
1069
|
+
inputSize: {
|
|
1070
|
+
width: 640,
|
|
1071
|
+
height: 640
|
|
1072
|
+
},
|
|
1073
|
+
labels: [{
|
|
1074
|
+
id: "face",
|
|
1075
|
+
name: "Face"
|
|
1076
|
+
}],
|
|
1077
|
+
preprocessMode: "letterbox",
|
|
1078
|
+
postprocessor: "yunet",
|
|
1079
|
+
defaultConfidence: .7,
|
|
1080
|
+
formats: {
|
|
1081
|
+
onnx: {
|
|
1082
|
+
url: hf("faceDetection/yunet/onnx/camstack-yunet-2023mar.onnx"),
|
|
1083
|
+
sizeMB: .23
|
|
1084
|
+
},
|
|
1085
|
+
coreml: {
|
|
1086
|
+
url: hf("faceDetection/yunet/coreml/camstack-yunet-2023mar.mlpackage"),
|
|
1087
|
+
sizeMB: .2,
|
|
1088
|
+
isDirectory: true,
|
|
1089
|
+
files: [...MLPACKAGE_FILES],
|
|
1090
|
+
runtimes: ["python"]
|
|
1091
|
+
},
|
|
1092
|
+
openvino: ovFormat(hf("faceDetection/yunet/openvino/camstack-yunet-2023mar.xml"), .36),
|
|
1093
|
+
tflite: {
|
|
1094
|
+
url: hf("faceDetection/yunet/tflite/camstack-yunet-2023mar_edgetpu.tflite"),
|
|
1095
|
+
sizeMB: .7,
|
|
1096
|
+
runtimes: ["python"]
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
}];
|
|
1100
|
+
var FACE_EMBEDDING_MODELS = [{
|
|
1101
|
+
id: "auraface-r100",
|
|
1102
|
+
license: AURAFACE_APACHE,
|
|
1103
|
+
name: "AuraFace R100",
|
|
1104
|
+
description: "AuraFace v1 (fal.ai) — iResNet-100 ArcFace face recognition embeddings (512-d), Apache-2.0. Benchmarks published by fal: LFW 99.65, CFP-FP 95.19, AgeDB 96.10, CALFW 94.70, CPLFW 90.93. Genuinely a ResNet-100 (65 M params) — roughly twice the depth of the former `arcface-r100` entry, which was a ResNet34.",
|
|
1105
|
+
inputSize: {
|
|
1106
|
+
width: 112,
|
|
1107
|
+
height: 112
|
|
1108
|
+
},
|
|
1109
|
+
labels: [{
|
|
1110
|
+
id: "embedding",
|
|
1111
|
+
name: "Face Embedding"
|
|
1112
|
+
}],
|
|
1113
|
+
preprocessMode: "resize",
|
|
1114
|
+
faceAlignment: true,
|
|
1115
|
+
formats: {
|
|
1116
|
+
onnx: {
|
|
1117
|
+
url: hf("faceRecognition/auraface/onnx/camstack-auraface-r100.onnx"),
|
|
1118
|
+
sizeMB: 261
|
|
1119
|
+
},
|
|
1120
|
+
coreml: {
|
|
1121
|
+
url: hf("faceRecognition/auraface/coreml/camstack-auraface-r100.mlpackage"),
|
|
1122
|
+
sizeMB: 131,
|
|
1123
|
+
isDirectory: true,
|
|
1124
|
+
files: [...MLPACKAGE_FILES],
|
|
1125
|
+
runtimes: ["python"]
|
|
1126
|
+
},
|
|
1127
|
+
openvino: ovFormat(hf("faceRecognition/auraface/openvino/camstack-auraface-r100.xml"), 131)
|
|
1128
|
+
}
|
|
1129
|
+
}];
|
|
1130
|
+
var PLATE_DETECTION_MODELS = [{
|
|
1131
|
+
id: "yolox-tiny-plate",
|
|
1132
|
+
license: OPEN_LPR_YOLOX_APACHE,
|
|
1133
|
+
name: "YOLOX-tiny — License Plate",
|
|
1134
|
+
description: "YOLOX-tiny licence-plate detector trained by the open-lpr project (Apache-2.0)",
|
|
1135
|
+
inputSize: {
|
|
1136
|
+
width: 640,
|
|
1137
|
+
height: 640
|
|
1138
|
+
},
|
|
1139
|
+
labels: [{
|
|
1140
|
+
id: "plate",
|
|
1141
|
+
name: "License Plate"
|
|
1142
|
+
}],
|
|
1143
|
+
preprocessMode: "letterbox",
|
|
1144
|
+
postprocessor: "yolo",
|
|
1145
|
+
formats: {
|
|
1146
|
+
onnx: {
|
|
1147
|
+
url: hf("plateDetection/yolox-tiny-plate/onnx/camstack-yolox-tiny-plate.onnx"),
|
|
1148
|
+
sizeMB: 19.3
|
|
1149
|
+
},
|
|
1150
|
+
coreml: {
|
|
1151
|
+
url: hf("plateDetection/yolox-tiny-plate/coreml/camstack-yolox-tiny-plate.mlpackage"),
|
|
1152
|
+
sizeMB: 9.8,
|
|
1153
|
+
isDirectory: true,
|
|
1154
|
+
files: [...MLPACKAGE_FILES],
|
|
1155
|
+
runtimes: ["python"]
|
|
1156
|
+
},
|
|
1157
|
+
openvino: ovFormat(hf("plateDetection/yolox-tiny-plate/openvino/camstack-yolox-tiny-plate.xml"), 10),
|
|
1158
|
+
tflite: {
|
|
1159
|
+
url: hf("plateDetection/yolox-tiny-plate/tflite/camstack-yolox-tiny-plate_edgetpu.tflite"),
|
|
1160
|
+
sizeMB: 6.9,
|
|
1161
|
+
runtimes: ["python"]
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
}];
|
|
1165
|
+
var PACKAGE_DETECTION_MODELS = [{
|
|
1166
|
+
id: "rfdetr-package",
|
|
1167
|
+
license: RFDETR_APACHE,
|
|
1168
|
+
name: "RF-DETR — Package",
|
|
1169
|
+
description: "RF-DETR parcel detector — DETR-style decode (onnx / coreml / openvino). Separates parcel from doormat far better than the former yolov8n-package (+0.86 vs +0.21 margin on 615) at ~4× the size and ~6× the latency",
|
|
1170
|
+
inputSize: {
|
|
1171
|
+
width: 576,
|
|
1172
|
+
height: 576
|
|
1173
|
+
},
|
|
1174
|
+
labels: [{
|
|
1175
|
+
id: "package",
|
|
1176
|
+
name: "Package"
|
|
1177
|
+
}],
|
|
1178
|
+
preprocessMode: "resize",
|
|
1179
|
+
inputNormalization: "imagenet",
|
|
1180
|
+
postprocessor: "rfdetr",
|
|
1181
|
+
formats: {
|
|
1182
|
+
onnx: {
|
|
1183
|
+
url: hf("packageDetection/rfdetr-package/onnx/camstack-rfdetr-package.onnx"),
|
|
1184
|
+
sizeMB: 115
|
|
1185
|
+
},
|
|
1186
|
+
coreml: {
|
|
1187
|
+
url: hf("packageDetection/rfdetr-package/coreml/camstack-rfdetr-package.mlpackage"),
|
|
1188
|
+
sizeMB: 58,
|
|
1189
|
+
isDirectory: true,
|
|
1190
|
+
files: [...MLPACKAGE_FILES],
|
|
1191
|
+
runtimes: ["python"]
|
|
1192
|
+
},
|
|
1193
|
+
openvino: ovFormat(hf("packageDetection/rfdetr-package/openvino/camstack-rfdetr-package.xml"), 58)
|
|
1194
|
+
}
|
|
1195
|
+
}];
|
|
1196
|
+
var PLATE_OCR_MODELS = [{
|
|
1197
|
+
id: "cct-s-v2-global",
|
|
1198
|
+
license: FAST_PLATE_OCR_MIT,
|
|
1199
|
+
name: "CCT-S v2 Global — License Plate",
|
|
1200
|
+
description: "fast-plate-ocr CCT-S v2 — a dedicated license-plate reader (66 regions incl. Germany). 19/21 exact on the cam-617 ground-truth set vs 4/21 for the generic VGG text recognizer, with zero false reads on 18 junk ROIs",
|
|
1201
|
+
inputSize: {
|
|
1202
|
+
width: 128,
|
|
1203
|
+
height: 64
|
|
1204
|
+
},
|
|
1205
|
+
inputLayout: "nhwc",
|
|
1206
|
+
labels: [{
|
|
1207
|
+
id: "text",
|
|
1208
|
+
name: "Plate Text"
|
|
1209
|
+
}],
|
|
1210
|
+
preprocessMode: "resize",
|
|
1211
|
+
postprocessor: "plate-slots",
|
|
1212
|
+
formats: {
|
|
1213
|
+
onnx: {
|
|
1214
|
+
url: hf("plateRecognition/cct-s-v2-global/onnx/camstack-cct-s-v2-global.onnx"),
|
|
1215
|
+
sizeMB: 5.3
|
|
1216
|
+
},
|
|
1217
|
+
coreml: {
|
|
1218
|
+
url: hf("plateRecognition/cct-s-v2-global/coreml/camstack-cct-s-v2-global.mlpackage"),
|
|
1219
|
+
sizeMB: 5.1,
|
|
1220
|
+
isDirectory: true,
|
|
1221
|
+
files: [...MLPACKAGE_FILES],
|
|
1222
|
+
runtimes: ["python"]
|
|
1223
|
+
},
|
|
1224
|
+
openvino: ovFormat(hf("plateRecognition/cct-s-v2-global/openvino/camstack-cct-s-v2-global.xml"), 5)
|
|
1225
|
+
}
|
|
1226
|
+
}];
|
|
1227
|
+
var ANIMAL_CLASSIFIER_MODELS = [{
|
|
1228
|
+
id: "animal-classifier",
|
|
1229
|
+
license: ANIMAL_CLASSIFIER_APACHE,
|
|
1230
|
+
name: "Animal Classifier (8)",
|
|
1231
|
+
description: "EfficientNet-Lite0 animal classifier — bird, cat, cow, deer, dog, horse, sheep, squirrel (Open Images V7, publicly distributable). Unreliable on home cameras: it has no reject class, so it names a species for anything it is given, and calls light curly-coated dogs sheep or cat at high confidence. Prefer a root detector that names animals itself.",
|
|
1232
|
+
defaultConfidence: .8,
|
|
1233
|
+
inputSize: {
|
|
1234
|
+
width: 224,
|
|
1235
|
+
height: 224
|
|
1236
|
+
},
|
|
1237
|
+
inputLayout: "nchw",
|
|
1238
|
+
inputNormalization: "imagenet",
|
|
1239
|
+
labels: [{
|
|
1240
|
+
id: "animal-type",
|
|
1241
|
+
name: "Animal Type"
|
|
1242
|
+
}],
|
|
1243
|
+
preprocessMode: "resize",
|
|
1244
|
+
formats: {
|
|
1245
|
+
onnx: {
|
|
1246
|
+
url: hf("animalClassification/animal-classifier/onnx/animal-classifier.onnx"),
|
|
1247
|
+
sizeMB: 13
|
|
1248
|
+
},
|
|
1249
|
+
coreml: {
|
|
1250
|
+
url: hf("animalClassification/animal-classifier/coreml/animal-classifier.mlpackage"),
|
|
1251
|
+
sizeMB: 6.5,
|
|
1252
|
+
isDirectory: true,
|
|
1253
|
+
files: [...MLPACKAGE_FILES],
|
|
1254
|
+
runtimes: ["python"]
|
|
1255
|
+
},
|
|
1256
|
+
openvino: ovFormat(hf("animalClassification/animal-classifier/openvino/animal-classifier.xml"), 6.9)
|
|
1257
|
+
},
|
|
1258
|
+
extraFiles: [{
|
|
1259
|
+
url: hf("animalClassification/animal-classifier/onnx/animal-classifier-labels.json"),
|
|
1260
|
+
filename: "animal-classifier-labels.json",
|
|
1261
|
+
sizeMB: .01
|
|
1262
|
+
}]
|
|
1263
|
+
}];
|
|
1264
|
+
var BIRD_CLASSIFIER_MODELS = [{
|
|
1265
|
+
id: "bird-classifier",
|
|
1266
|
+
license: AIY_BIRDS_APACHE,
|
|
1267
|
+
name: "Bird Classifier (AIY 965)",
|
|
1268
|
+
description: "Google AIY Birds V1 (MobileNetV2) — 964 species + background; publicly distributable (Apache-2.0)",
|
|
1269
|
+
inputSize: {
|
|
1270
|
+
width: 224,
|
|
1271
|
+
height: 224
|
|
1272
|
+
},
|
|
1273
|
+
inputLayout: "nhwc",
|
|
1274
|
+
inputNormalization: "none",
|
|
1275
|
+
outputProbabilities: true,
|
|
1276
|
+
labels: [{
|
|
1277
|
+
id: "species",
|
|
1278
|
+
name: "Bird Species"
|
|
1279
|
+
}],
|
|
1280
|
+
preprocessMode: "resize",
|
|
1281
|
+
formats: {
|
|
1282
|
+
onnx: {
|
|
1283
|
+
url: hf("animalClassification/bird-classifier/onnx/bird-classifier.onnx"),
|
|
1284
|
+
sizeMB: 14
|
|
1285
|
+
},
|
|
1286
|
+
coreml: {
|
|
1287
|
+
url: hf("animalClassification/bird-classifier/coreml/bird-classifier.mlpackage"),
|
|
1288
|
+
sizeMB: 6.8,
|
|
1289
|
+
isDirectory: true,
|
|
1290
|
+
files: [...MLPACKAGE_FILES],
|
|
1291
|
+
runtimes: ["python"]
|
|
1292
|
+
},
|
|
1293
|
+
openvino: ovFormat(hf("animalClassification/bird-classifier/openvino/bird-classifier.xml"), 14),
|
|
1294
|
+
tflite: {
|
|
1295
|
+
url: hf("animalClassification/bird-classifier/tflite/bird-classifier_edgetpu.tflite"),
|
|
1296
|
+
sizeMB: 3.9,
|
|
1297
|
+
runtimes: ["python"]
|
|
1298
|
+
}
|
|
1299
|
+
},
|
|
1300
|
+
extraFiles: [{
|
|
1301
|
+
url: hf("animalClassification/bird-classifier/onnx/bird-classifier-labels.json"),
|
|
1302
|
+
filename: "bird-classifier-labels.json",
|
|
1303
|
+
sizeMB: .03
|
|
1304
|
+
}]
|
|
1305
|
+
}];
|
|
1306
|
+
var VEHICLE_CLASSIFIER_MODELS = [{
|
|
1307
|
+
id: "vehicle-type-v1",
|
|
1308
|
+
license: VEHICLE_TYPE_V1_NC,
|
|
1309
|
+
name: "Vehicle Type (8)",
|
|
1310
|
+
description: "MobileNetV3-Large vehicle type classifier — Ambulance, Bicycle, Bus, Car, Motorcycle, Taxi, Truck, Van (val 89.4%)",
|
|
1311
|
+
defaultConfidence: .6,
|
|
1312
|
+
inputSize: {
|
|
1313
|
+
width: 224,
|
|
1314
|
+
height: 224
|
|
1315
|
+
},
|
|
1316
|
+
inputLayout: "nchw",
|
|
1317
|
+
inputNormalization: "imagenet",
|
|
1318
|
+
labels: [{
|
|
1319
|
+
id: "vehicle-type",
|
|
1320
|
+
name: "Vehicle Type"
|
|
1321
|
+
}],
|
|
1322
|
+
preprocessMode: "resize",
|
|
1323
|
+
formats: {
|
|
1324
|
+
onnx: {
|
|
1325
|
+
url: hf("vehicleClassification/vehicle-type-v1/onnx/vehicle-type-v1.onnx"),
|
|
1326
|
+
sizeMB: 17
|
|
1327
|
+
},
|
|
1328
|
+
coreml: {
|
|
1329
|
+
url: hf("vehicleClassification/vehicle-type-v1/coreml/vehicle-type-v1.mlpackage"),
|
|
1330
|
+
sizeMB: 8.1,
|
|
1331
|
+
isDirectory: true,
|
|
1332
|
+
files: [...MLPACKAGE_FILES],
|
|
1333
|
+
runtimes: ["python"]
|
|
1334
|
+
},
|
|
1335
|
+
openvino: ovFormat(hf("vehicleClassification/vehicle-type-v1/openvino/vehicle-type-v1.xml"), 8.7)
|
|
1336
|
+
},
|
|
1337
|
+
extraFiles: [{
|
|
1338
|
+
url: hf("vehicleClassification/vehicle-type-v1/onnx/vehicle-type-v1-labels.json"),
|
|
1339
|
+
filename: "vehicle-type-v1-labels.json",
|
|
1340
|
+
sizeMB: .01
|
|
1341
|
+
}]
|
|
1342
|
+
}];
|
|
1343
|
+
var SEGMENTATION_REFINER_MODELS = [{
|
|
1344
|
+
id: "u2netp",
|
|
1345
|
+
license: U2NET_APACHE,
|
|
1346
|
+
name: "U2-Net Portable",
|
|
1347
|
+
description: "U2-Net-P — ultra-lightweight salient object segmentation (4.7 MB)",
|
|
1348
|
+
inputSize: {
|
|
1349
|
+
width: 320,
|
|
1350
|
+
height: 320
|
|
1351
|
+
},
|
|
1352
|
+
labels: [{
|
|
1353
|
+
id: "mask",
|
|
1354
|
+
name: "Segmentation Mask"
|
|
1355
|
+
}],
|
|
1356
|
+
preprocessMode: "resize",
|
|
1357
|
+
formats: {
|
|
1358
|
+
onnx: {
|
|
1359
|
+
url: hf("segmentationRefiner/u2netp/onnx/camstack-u2netp.onnx"),
|
|
1360
|
+
sizeMB: 5
|
|
1361
|
+
},
|
|
1362
|
+
coreml: {
|
|
1363
|
+
url: hf("segmentationRefiner/u2netp/coreml/camstack-u2netp.mlpackage"),
|
|
1364
|
+
sizeMB: 3,
|
|
1365
|
+
isDirectory: true,
|
|
1366
|
+
files: [...MLPACKAGE_FILES],
|
|
1367
|
+
runtimes: ["python"]
|
|
1368
|
+
},
|
|
1369
|
+
openvino: ovFormat(hf("segmentationRefiner/u2netp/openvino/camstack-u2netp.xml"), 2.5)
|
|
1370
|
+
}
|
|
1371
|
+
}];
|
|
1372
|
+
/**
|
|
1373
|
+
* The dormant `instance-segmentation` step's catalog: the YOLO26-seg entries of
|
|
1374
|
+
* {@link OBJECT_DETECTION_MODELS}, by reference. One entry per model (D703) —
|
|
1375
|
+
* the artifact lives once, in the root's catalog, where it can be selected as
|
|
1376
|
+
* the camera root and supply the `segmentation` step's masks (D737).
|
|
1377
|
+
*/
|
|
1378
|
+
var INSTANCE_SEGMENTATION_MODELS = OBJECT_DETECTION_MODELS.filter((m) => m.group?.family === YOLO26_SEG_FAMILY);
|
|
1379
|
+
var CLIP_EMBEDDING_MODELS = [{
|
|
1380
|
+
id: "siglip2-b16-224",
|
|
1381
|
+
license: SIGLIP2_APACHE,
|
|
1382
|
+
name: "SigLIP2 B/16",
|
|
1383
|
+
description: "Google SigLIP2 base, patch 16, 224×224 — Apache-2.0 CLIP vision encoder, 768-dim (fp16 OpenVINO/CoreML)",
|
|
1384
|
+
inputSize: {
|
|
1385
|
+
width: 224,
|
|
1386
|
+
height: 224
|
|
1387
|
+
},
|
|
1388
|
+
labels: [{
|
|
1389
|
+
id: "embedding",
|
|
1390
|
+
name: "CLIP Embedding"
|
|
1391
|
+
}],
|
|
1392
|
+
preprocessMode: "resize",
|
|
1393
|
+
inputNormalization: "none",
|
|
1394
|
+
formats: {
|
|
1395
|
+
openvino: ovFormat(hf("clip/siglip2/openvino/camstack-siglip2-b16-224-vision.xml"), 186),
|
|
1396
|
+
coreml: {
|
|
1397
|
+
url: hf("clip/siglip2/coreml/camstack-siglip2-b16-224-vision.mlpackage"),
|
|
1398
|
+
sizeMB: 185,
|
|
1399
|
+
isDirectory: true,
|
|
1400
|
+
files: [...MLPACKAGE_FILES],
|
|
1401
|
+
runtimes: ["python"]
|
|
1402
|
+
}
|
|
1403
|
+
}
|
|
1404
|
+
}];
|
|
1405
|
+
var AUDIO_CLASSIFIER_MODELS = [{
|
|
1406
|
+
id: "yamnet-onnx",
|
|
1407
|
+
license: YAMNET_APACHE,
|
|
1408
|
+
name: "YAMNet",
|
|
1409
|
+
description: "Google YAMNet — 521-class audio event classifier (16 MB ONNX, runs on any platform)",
|
|
1410
|
+
inputSize: {
|
|
1411
|
+
width: 1,
|
|
1412
|
+
height: 16e3
|
|
1413
|
+
},
|
|
1414
|
+
labels: [],
|
|
1415
|
+
preprocessMode: "resize",
|
|
1416
|
+
extraFiles: [{
|
|
1417
|
+
url: hf("audioClassification/yamnet/camstack-yamnet-labels.json"),
|
|
1418
|
+
filename: "camstack-yamnet-labels.json",
|
|
1419
|
+
sizeMB: .01
|
|
1420
|
+
}],
|
|
1421
|
+
formats: {
|
|
1422
|
+
onnx: {
|
|
1423
|
+
url: hf("audioClassification/yamnet/onnx/camstack-yamnet.onnx"),
|
|
1424
|
+
sizeMB: 16.1
|
|
1425
|
+
},
|
|
1426
|
+
openvino: ovFormat(hf("audioClassification/yamnet/openvino/camstack-yamnet.xml"), 8.2)
|
|
1427
|
+
}
|
|
1428
|
+
}, {
|
|
1429
|
+
id: "apple-soundanalysis",
|
|
1430
|
+
license: APPLE_SOUNDANALYSIS,
|
|
1431
|
+
name: "Apple SoundAnalysis",
|
|
1432
|
+
description: "macOS built-in — 303 sound categories, Neural Engine accelerated, zero download",
|
|
1433
|
+
inputSize: {
|
|
1434
|
+
width: 1,
|
|
1435
|
+
height: 16e3
|
|
1436
|
+
},
|
|
1437
|
+
labels: [],
|
|
1438
|
+
preprocessMode: "resize",
|
|
1439
|
+
formats: { coreml: {
|
|
1440
|
+
url: "",
|
|
1441
|
+
sizeMB: 0
|
|
1442
|
+
} }
|
|
1443
|
+
}];
|
|
1444
|
+
//#endregion
|
|
1445
|
+
export { FACE_DETECTION_MODELS as a, OBJECT_DETECTION_MODELS as c, PLATE_OCR_MODELS as d, SEGMENTATION_REFINER_MODELS as f, CLIP_EMBEDDING_MODELS as i, PACKAGE_DETECTION_MODELS as l, AUDIO_CLASSIFIER_MODELS as n, FACE_EMBEDDING_MODELS as o, VEHICLE_CLASSIFIER_MODELS as p, BIRD_CLASSIFIER_MODELS as r, INSTANCE_SEGMENTATION_MODELS as s, ANIMAL_CLASSIFIER_MODELS as t, PLATE_DETECTION_MODELS as u };
|