@camstack/addon-vision 0.1.0 → 0.1.1
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/addons/animal-classifier/index.d.mts +6 -1
- package/dist/addons/animal-classifier/index.d.ts +6 -1
- package/dist/addons/animal-classifier/index.js +514 -49
- package/dist/addons/animal-classifier/index.js.map +1 -1
- package/dist/addons/animal-classifier/index.mjs +6 -4
- package/dist/addons/audio-classification/index.d.mts +6 -1
- package/dist/addons/audio-classification/index.d.ts +6 -1
- package/dist/addons/audio-classification/index.js +87 -26
- package/dist/addons/audio-classification/index.js.map +1 -1
- package/dist/addons/audio-classification/index.mjs +3 -2
- package/dist/addons/bird-global-classifier/index.d.mts +6 -1
- package/dist/addons/bird-global-classifier/index.d.ts +6 -1
- package/dist/addons/bird-global-classifier/index.js +515 -50
- package/dist/addons/bird-global-classifier/index.js.map +1 -1
- package/dist/addons/bird-global-classifier/index.mjs +6 -4
- package/dist/addons/bird-nabirds-classifier/index.d.mts +6 -1
- package/dist/addons/bird-nabirds-classifier/index.d.ts +6 -1
- package/dist/addons/bird-nabirds-classifier/index.js +524 -60
- package/dist/addons/bird-nabirds-classifier/index.js.map +1 -1
- package/dist/addons/bird-nabirds-classifier/index.mjs +6 -4
- package/dist/addons/face-detection/index.d.mts +6 -1
- package/dist/addons/face-detection/index.d.ts +6 -1
- package/dist/addons/face-detection/index.js +539 -39
- package/dist/addons/face-detection/index.js.map +1 -1
- package/dist/addons/face-detection/index.mjs +5 -3
- package/dist/addons/face-recognition/index.d.mts +6 -1
- package/dist/addons/face-recognition/index.d.ts +6 -1
- package/dist/addons/face-recognition/index.js +488 -33
- package/dist/addons/face-recognition/index.js.map +1 -1
- package/dist/addons/face-recognition/index.mjs +5 -3
- package/dist/addons/motion-detection/index.d.mts +3 -1
- package/dist/addons/motion-detection/index.d.ts +3 -1
- package/dist/addons/motion-detection/index.js +11 -3
- package/dist/addons/motion-detection/index.js.map +1 -1
- package/dist/addons/motion-detection/index.mjs +140 -3
- package/dist/addons/motion-detection/index.mjs.map +1 -1
- package/dist/addons/object-detection/index.d.mts +6 -1
- package/dist/addons/object-detection/index.d.ts +6 -1
- package/dist/addons/object-detection/index.js +370 -72
- package/dist/addons/object-detection/index.js.map +1 -1
- package/dist/addons/object-detection/index.mjs +5 -3
- package/dist/addons/plate-detection/index.d.mts +6 -1
- package/dist/addons/plate-detection/index.d.ts +6 -1
- package/dist/addons/plate-detection/index.js +532 -31
- package/dist/addons/plate-detection/index.js.map +1 -1
- package/dist/addons/plate-detection/index.mjs +5 -3
- package/dist/addons/plate-recognition/index.d.mts +7 -1
- package/dist/addons/plate-recognition/index.d.ts +7 -1
- package/dist/addons/plate-recognition/index.js +177 -44
- package/dist/addons/plate-recognition/index.js.map +1 -1
- package/dist/addons/plate-recognition/index.mjs +4 -3
- package/dist/addons/segmentation-refiner/index.d.mts +30 -0
- package/dist/addons/segmentation-refiner/index.d.ts +30 -0
- package/dist/addons/segmentation-refiner/index.js +1049 -0
- package/dist/addons/segmentation-refiner/index.js.map +1 -0
- package/dist/addons/segmentation-refiner/index.mjs +209 -0
- package/dist/addons/segmentation-refiner/index.mjs.map +1 -0
- package/dist/addons/vehicle-classifier/index.d.mts +31 -0
- package/dist/addons/vehicle-classifier/index.d.ts +31 -0
- package/dist/addons/vehicle-classifier/index.js +689 -0
- package/dist/addons/vehicle-classifier/index.js.map +1 -0
- package/dist/addons/vehicle-classifier/index.mjs +250 -0
- package/dist/addons/vehicle-classifier/index.mjs.map +1 -0
- package/dist/{chunk-6OR5TE7A.mjs → chunk-22BHCDT5.mjs} +2 -2
- package/dist/chunk-22BHCDT5.mjs.map +1 -0
- package/dist/{chunk-LPI42WL6.mjs → chunk-6DJZZR64.mjs} +24 -12
- package/dist/chunk-6DJZZR64.mjs.map +1 -0
- package/dist/chunk-7DYHXUPZ.mjs +36 -0
- package/dist/chunk-7DYHXUPZ.mjs.map +1 -0
- package/dist/chunk-BJTO5JO5.mjs +11 -0
- package/dist/chunk-BP7H4NFS.mjs +412 -0
- package/dist/chunk-BP7H4NFS.mjs.map +1 -0
- package/dist/chunk-BR2FPGOX.mjs +98 -0
- package/dist/chunk-BR2FPGOX.mjs.map +1 -0
- package/dist/{chunk-B3R66MPF.mjs → chunk-DNQNGDR4.mjs} +58 -21
- package/dist/chunk-DNQNGDR4.mjs.map +1 -0
- package/dist/{chunk-ISOIDU4U.mjs → chunk-DUN6XU3N.mjs} +23 -5
- package/dist/chunk-DUN6XU3N.mjs.map +1 -0
- package/dist/{chunk-MEVASN3P.mjs → chunk-EPNWLSCG.mjs} +104 -22
- package/dist/chunk-EPNWLSCG.mjs.map +1 -0
- package/dist/{chunk-AYBFB7ID.mjs → chunk-G32RCIUI.mjs} +200 -318
- package/dist/chunk-G32RCIUI.mjs.map +1 -0
- package/dist/{chunk-3MQFUDRU.mjs → chunk-GR65KM6X.mjs} +76 -47
- package/dist/chunk-GR65KM6X.mjs.map +1 -0
- package/dist/{chunk-5AIQSN32.mjs → chunk-H7LMBTS5.mjs} +66 -17
- package/dist/chunk-H7LMBTS5.mjs.map +1 -0
- package/dist/{chunk-J4WRYHHY.mjs → chunk-IK4XIQPC.mjs} +66 -36
- package/dist/chunk-IK4XIQPC.mjs.map +1 -0
- package/dist/{chunk-5JJZGKL7.mjs → chunk-J6VNIIYX.mjs} +102 -19
- package/dist/chunk-J6VNIIYX.mjs.map +1 -0
- package/dist/{chunk-Q3SQOYG6.mjs → chunk-ML2JX43J.mjs} +67 -37
- package/dist/chunk-ML2JX43J.mjs.map +1 -0
- package/dist/{chunk-PDSHDDPV.mjs → chunk-WUMV524J.mjs} +159 -35
- package/dist/chunk-WUMV524J.mjs.map +1 -0
- package/dist/chunk-XZ6ZMXXU.mjs +39 -0
- package/dist/chunk-XZ6ZMXXU.mjs.map +1 -0
- package/dist/index.d.mts +17 -5
- package/dist/index.d.ts +17 -5
- package/dist/index.js +1344 -550
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +191 -20
- package/dist/index.mjs.map +1 -1
- package/package.json +95 -18
- package/python/coreml_inference.py +61 -18
- package/python/openvino_inference.py +12 -4
- package/python/pytorch_inference.py +12 -4
- package/dist/addons/camera-native-detection/index.d.mts +0 -32
- package/dist/addons/camera-native-detection/index.d.ts +0 -32
- package/dist/addons/camera-native-detection/index.js +0 -99
- package/dist/addons/camera-native-detection/index.js.map +0 -1
- package/dist/addons/camera-native-detection/index.mjs +0 -7
- package/dist/chunk-3MQFUDRU.mjs.map +0 -1
- package/dist/chunk-5AIQSN32.mjs.map +0 -1
- package/dist/chunk-5JJZGKL7.mjs.map +0 -1
- package/dist/chunk-6OR5TE7A.mjs.map +0 -1
- package/dist/chunk-AYBFB7ID.mjs.map +0 -1
- package/dist/chunk-B3R66MPF.mjs.map +0 -1
- package/dist/chunk-DTOAB2CE.mjs +0 -79
- package/dist/chunk-DTOAB2CE.mjs.map +0 -1
- package/dist/chunk-ISOIDU4U.mjs.map +0 -1
- package/dist/chunk-J4WRYHHY.mjs.map +0 -1
- package/dist/chunk-LPI42WL6.mjs.map +0 -1
- package/dist/chunk-MEVASN3P.mjs.map +0 -1
- package/dist/chunk-PDSHDDPV.mjs.map +0 -1
- package/dist/chunk-Q3SQOYG6.mjs.map +0 -1
- package/dist/chunk-QIMDG34B.mjs +0 -229
- package/dist/chunk-QIMDG34B.mjs.map +0 -1
- package/python/__pycache__/coreml_inference.cpython-313.pyc +0 -0
- package/python/__pycache__/openvino_inference.cpython-313.pyc +0 -0
- package/python/__pycache__/pytorch_inference.cpython-313.pyc +0 -0
- /package/dist/{addons/camera-native-detection/index.mjs.map → chunk-BJTO5JO5.mjs.map} +0 -0
|
@@ -37,7 +37,13 @@ module.exports = __toCommonJS(object_detection_exports);
|
|
|
37
37
|
// src/catalogs/object-detection-models.ts
|
|
38
38
|
var import_types = require("@camstack/types");
|
|
39
39
|
var HF_REPO = "camstack/camstack-models";
|
|
40
|
+
var MLPACKAGE_FILES = [
|
|
41
|
+
"Manifest.json",
|
|
42
|
+
"Data/com.apple.CoreML/model.mlmodel",
|
|
43
|
+
"Data/com.apple.CoreML/weights/weight.bin"
|
|
44
|
+
];
|
|
40
45
|
var OBJECT_DETECTION_MODELS = [
|
|
46
|
+
// ── YOLOv8 ──────────────────────────────────────────────────────
|
|
41
47
|
{
|
|
42
48
|
id: "yolov8n",
|
|
43
49
|
name: "YOLOv8 Nano",
|
|
@@ -51,15 +57,20 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
51
57
|
},
|
|
52
58
|
coreml: {
|
|
53
59
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/coreml/camstack-yolov8n.mlpackage"),
|
|
54
|
-
sizeMB: 6
|
|
60
|
+
sizeMB: 6,
|
|
61
|
+
isDirectory: true,
|
|
62
|
+
files: MLPACKAGE_FILES,
|
|
63
|
+
runtimes: ["python"]
|
|
55
64
|
},
|
|
56
65
|
openvino: {
|
|
57
66
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/openvino/camstack-yolov8n.xml"),
|
|
58
|
-
sizeMB: 7
|
|
67
|
+
sizeMB: 7,
|
|
68
|
+
runtimes: ["python"]
|
|
59
69
|
},
|
|
60
70
|
tflite: {
|
|
61
71
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/tflite/camstack-yolov8n_float32.tflite"),
|
|
62
|
-
sizeMB: 12
|
|
72
|
+
sizeMB: 12,
|
|
73
|
+
runtimes: ["python"]
|
|
63
74
|
}
|
|
64
75
|
}
|
|
65
76
|
},
|
|
@@ -76,14 +87,32 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
76
87
|
},
|
|
77
88
|
coreml: {
|
|
78
89
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/coreml/camstack-yolov8s.mlpackage"),
|
|
79
|
-
sizeMB: 21
|
|
90
|
+
sizeMB: 21,
|
|
91
|
+
isDirectory: true,
|
|
92
|
+
files: MLPACKAGE_FILES,
|
|
93
|
+
runtimes: ["python"]
|
|
80
94
|
},
|
|
81
95
|
openvino: {
|
|
82
96
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/openvino/camstack-yolov8s.xml"),
|
|
83
|
-
sizeMB: 22
|
|
97
|
+
sizeMB: 22,
|
|
98
|
+
runtimes: ["python"]
|
|
84
99
|
},
|
|
85
100
|
tflite: {
|
|
86
101
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/tflite/camstack-yolov8s_float32.tflite"),
|
|
102
|
+
sizeMB: 43,
|
|
103
|
+
runtimes: ["python"]
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
id: "yolov8s-relu",
|
|
109
|
+
name: "YOLOv8 Small ReLU",
|
|
110
|
+
description: "YOLOv8 Small with ReLU activation \u2014 better hardware compatibility",
|
|
111
|
+
inputSize: { width: 640, height: 640 },
|
|
112
|
+
labels: import_types.COCO_80_LABELS,
|
|
113
|
+
formats: {
|
|
114
|
+
onnx: {
|
|
115
|
+
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/onnx/camstack-yolov8s-relu.onnx"),
|
|
87
116
|
sizeMB: 43
|
|
88
117
|
}
|
|
89
118
|
}
|
|
@@ -101,18 +130,74 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
101
130
|
},
|
|
102
131
|
coreml: {
|
|
103
132
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/coreml/camstack-yolov8m.mlpackage"),
|
|
104
|
-
sizeMB: 49
|
|
133
|
+
sizeMB: 49,
|
|
134
|
+
isDirectory: true,
|
|
135
|
+
files: MLPACKAGE_FILES,
|
|
136
|
+
runtimes: ["python"]
|
|
105
137
|
},
|
|
106
138
|
openvino: {
|
|
107
139
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/openvino/camstack-yolov8m.xml"),
|
|
108
|
-
sizeMB: 50
|
|
140
|
+
sizeMB: 50,
|
|
141
|
+
runtimes: ["python"]
|
|
109
142
|
},
|
|
110
143
|
tflite: {
|
|
111
144
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/tflite/camstack-yolov8m_float32.tflite"),
|
|
112
|
-
sizeMB: 99
|
|
145
|
+
sizeMB: 99,
|
|
146
|
+
runtimes: ["python"]
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
id: "yolov8l",
|
|
152
|
+
name: "YOLOv8 Large",
|
|
153
|
+
description: "YOLOv8 Large \u2014 high-accuracy large model",
|
|
154
|
+
inputSize: { width: 640, height: 640 },
|
|
155
|
+
labels: import_types.COCO_80_LABELS,
|
|
156
|
+
formats: {
|
|
157
|
+
onnx: {
|
|
158
|
+
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/onnx/camstack-yolov8l.onnx"),
|
|
159
|
+
sizeMB: 167
|
|
160
|
+
},
|
|
161
|
+
coreml: {
|
|
162
|
+
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/coreml/camstack-yolov8l.mlpackage"),
|
|
163
|
+
sizeMB: 83,
|
|
164
|
+
isDirectory: true,
|
|
165
|
+
files: MLPACKAGE_FILES,
|
|
166
|
+
runtimes: ["python"]
|
|
167
|
+
},
|
|
168
|
+
openvino: {
|
|
169
|
+
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/openvino/camstack-yolov8l.xml"),
|
|
170
|
+
sizeMB: 84,
|
|
171
|
+
runtimes: ["python"]
|
|
113
172
|
}
|
|
114
173
|
}
|
|
115
174
|
},
|
|
175
|
+
{
|
|
176
|
+
id: "yolov8x",
|
|
177
|
+
name: "YOLOv8 Extra-Large",
|
|
178
|
+
description: "YOLOv8 Extra-Large \u2014 maximum accuracy",
|
|
179
|
+
inputSize: { width: 640, height: 640 },
|
|
180
|
+
labels: import_types.COCO_80_LABELS,
|
|
181
|
+
formats: {
|
|
182
|
+
onnx: {
|
|
183
|
+
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/onnx/camstack-yolov8x.onnx"),
|
|
184
|
+
sizeMB: 260
|
|
185
|
+
},
|
|
186
|
+
coreml: {
|
|
187
|
+
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/coreml/camstack-yolov8x.mlpackage"),
|
|
188
|
+
sizeMB: 130,
|
|
189
|
+
isDirectory: true,
|
|
190
|
+
files: MLPACKAGE_FILES,
|
|
191
|
+
runtimes: ["python"]
|
|
192
|
+
},
|
|
193
|
+
openvino: {
|
|
194
|
+
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov8/openvino/camstack-yolov8x.xml"),
|
|
195
|
+
sizeMB: 131,
|
|
196
|
+
runtimes: ["python"]
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
// ── YOLOv9 ──────────────────────────────────────────────────────
|
|
116
201
|
{
|
|
117
202
|
id: "yolov9t",
|
|
118
203
|
name: "YOLOv9 Tiny",
|
|
@@ -126,15 +211,20 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
126
211
|
},
|
|
127
212
|
coreml: {
|
|
128
213
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov9/coreml/camstack-yolov9t.mlpackage"),
|
|
129
|
-
sizeMB: 4
|
|
214
|
+
sizeMB: 4,
|
|
215
|
+
isDirectory: true,
|
|
216
|
+
files: MLPACKAGE_FILES,
|
|
217
|
+
runtimes: ["python"]
|
|
130
218
|
},
|
|
131
219
|
openvino: {
|
|
132
220
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov9/openvino/camstack-yolov9t.xml"),
|
|
133
|
-
sizeMB: 6
|
|
221
|
+
sizeMB: 6,
|
|
222
|
+
runtimes: ["python"]
|
|
134
223
|
},
|
|
135
224
|
tflite: {
|
|
136
225
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov9/tflite/camstack-yolov9t_float32.tflite"),
|
|
137
|
-
sizeMB: 8
|
|
226
|
+
sizeMB: 8,
|
|
227
|
+
runtimes: ["python"]
|
|
138
228
|
}
|
|
139
229
|
}
|
|
140
230
|
},
|
|
@@ -151,15 +241,20 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
151
241
|
},
|
|
152
242
|
coreml: {
|
|
153
243
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov9/coreml/camstack-yolov9s.mlpackage"),
|
|
154
|
-
sizeMB: 14
|
|
244
|
+
sizeMB: 14,
|
|
245
|
+
isDirectory: true,
|
|
246
|
+
files: MLPACKAGE_FILES,
|
|
247
|
+
runtimes: ["python"]
|
|
155
248
|
},
|
|
156
249
|
openvino: {
|
|
157
250
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov9/openvino/camstack-yolov9s.xml"),
|
|
158
|
-
sizeMB: 16
|
|
251
|
+
sizeMB: 16,
|
|
252
|
+
runtimes: ["python"]
|
|
159
253
|
},
|
|
160
254
|
tflite: {
|
|
161
255
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov9/tflite/camstack-yolov9s_float32.tflite"),
|
|
162
|
-
sizeMB: 28
|
|
256
|
+
sizeMB: 28,
|
|
257
|
+
runtimes: ["python"]
|
|
163
258
|
}
|
|
164
259
|
}
|
|
165
260
|
},
|
|
@@ -176,23 +271,28 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
176
271
|
},
|
|
177
272
|
coreml: {
|
|
178
273
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov9/coreml/camstack-yolov9c.mlpackage"),
|
|
179
|
-
sizeMB: 48
|
|
274
|
+
sizeMB: 48,
|
|
275
|
+
isDirectory: true,
|
|
276
|
+
files: MLPACKAGE_FILES,
|
|
277
|
+
runtimes: ["python"]
|
|
180
278
|
},
|
|
181
279
|
openvino: {
|
|
182
280
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov9/openvino/camstack-yolov9c.xml"),
|
|
183
|
-
sizeMB: 49
|
|
281
|
+
sizeMB: 49,
|
|
282
|
+
runtimes: ["python"]
|
|
184
283
|
},
|
|
185
284
|
tflite: {
|
|
186
285
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolov9/tflite/camstack-yolov9c_float32.tflite"),
|
|
187
|
-
sizeMB: 97
|
|
286
|
+
sizeMB: 97,
|
|
287
|
+
runtimes: ["python"]
|
|
188
288
|
}
|
|
189
289
|
}
|
|
190
290
|
},
|
|
191
|
-
// YOLO11
|
|
291
|
+
// ── YOLO11 ────────────────────────────────────────────────────
|
|
192
292
|
{
|
|
193
293
|
id: "yolo11n",
|
|
194
294
|
name: "YOLO11 Nano",
|
|
195
|
-
description: "YOLO11 Nano \u2014 fastest, smallest YOLO11 detection model",
|
|
295
|
+
description: "YOLO11 Nano \u2014 fastest, smallest YOLO11 detection model (mAP 39.5)",
|
|
196
296
|
inputSize: { width: 640, height: 640 },
|
|
197
297
|
labels: import_types.COCO_80_LABELS,
|
|
198
298
|
formats: {
|
|
@@ -200,20 +300,29 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
200
300
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/onnx/camstack-yolo11n.onnx"),
|
|
201
301
|
sizeMB: 10
|
|
202
302
|
},
|
|
303
|
+
coreml: {
|
|
304
|
+
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/coreml/camstack-yolo11n.mlpackage"),
|
|
305
|
+
sizeMB: 5,
|
|
306
|
+
isDirectory: true,
|
|
307
|
+
files: MLPACKAGE_FILES,
|
|
308
|
+
runtimes: ["python"]
|
|
309
|
+
},
|
|
203
310
|
openvino: {
|
|
204
311
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/openvino/camstack-yolo11n.xml"),
|
|
205
|
-
sizeMB: 5
|
|
312
|
+
sizeMB: 5,
|
|
313
|
+
runtimes: ["python"]
|
|
206
314
|
},
|
|
207
315
|
tflite: {
|
|
208
316
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/tflite/camstack-yolo11n_float32.tflite"),
|
|
209
|
-
sizeMB: 10
|
|
317
|
+
sizeMB: 10,
|
|
318
|
+
runtimes: ["python"]
|
|
210
319
|
}
|
|
211
320
|
}
|
|
212
321
|
},
|
|
213
322
|
{
|
|
214
323
|
id: "yolo11s",
|
|
215
324
|
name: "YOLO11 Small",
|
|
216
|
-
description: "YOLO11 Small \u2014 balanced speed and accuracy",
|
|
325
|
+
description: "YOLO11 Small \u2014 balanced speed and accuracy (mAP 47.0)",
|
|
217
326
|
inputSize: { width: 640, height: 640 },
|
|
218
327
|
labels: import_types.COCO_80_LABELS,
|
|
219
328
|
formats: {
|
|
@@ -221,20 +330,29 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
221
330
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/onnx/camstack-yolo11s.onnx"),
|
|
222
331
|
sizeMB: 36
|
|
223
332
|
},
|
|
333
|
+
coreml: {
|
|
334
|
+
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/coreml/camstack-yolo11s.mlpackage"),
|
|
335
|
+
sizeMB: 18,
|
|
336
|
+
isDirectory: true,
|
|
337
|
+
files: MLPACKAGE_FILES,
|
|
338
|
+
runtimes: ["python"]
|
|
339
|
+
},
|
|
224
340
|
openvino: {
|
|
225
341
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/openvino/camstack-yolo11s.xml"),
|
|
226
|
-
sizeMB: 18
|
|
342
|
+
sizeMB: 18,
|
|
343
|
+
runtimes: ["python"]
|
|
227
344
|
},
|
|
228
345
|
tflite: {
|
|
229
346
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/tflite/camstack-yolo11s_float32.tflite"),
|
|
230
|
-
sizeMB: 36
|
|
347
|
+
sizeMB: 36,
|
|
348
|
+
runtimes: ["python"]
|
|
231
349
|
}
|
|
232
350
|
}
|
|
233
351
|
},
|
|
234
352
|
{
|
|
235
353
|
id: "yolo11m",
|
|
236
354
|
name: "YOLO11 Medium",
|
|
237
|
-
description: "YOLO11 Medium \u2014 higher accuracy, moderate size",
|
|
355
|
+
description: "YOLO11 Medium \u2014 higher accuracy, moderate size (mAP 51.5)",
|
|
238
356
|
inputSize: { width: 640, height: 640 },
|
|
239
357
|
labels: import_types.COCO_80_LABELS,
|
|
240
358
|
formats: {
|
|
@@ -242,20 +360,29 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
242
360
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/onnx/camstack-yolo11m.onnx"),
|
|
243
361
|
sizeMB: 77
|
|
244
362
|
},
|
|
363
|
+
coreml: {
|
|
364
|
+
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/coreml/camstack-yolo11m.mlpackage"),
|
|
365
|
+
sizeMB: 39,
|
|
366
|
+
isDirectory: true,
|
|
367
|
+
files: MLPACKAGE_FILES,
|
|
368
|
+
runtimes: ["python"]
|
|
369
|
+
},
|
|
245
370
|
openvino: {
|
|
246
371
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/openvino/camstack-yolo11m.xml"),
|
|
247
|
-
sizeMB: 39
|
|
372
|
+
sizeMB: 39,
|
|
373
|
+
runtimes: ["python"]
|
|
248
374
|
},
|
|
249
375
|
tflite: {
|
|
250
376
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/tflite/camstack-yolo11m_float32.tflite"),
|
|
251
|
-
sizeMB: 77
|
|
377
|
+
sizeMB: 77,
|
|
378
|
+
runtimes: ["python"]
|
|
252
379
|
}
|
|
253
380
|
}
|
|
254
381
|
},
|
|
255
382
|
{
|
|
256
383
|
id: "yolo11l",
|
|
257
384
|
name: "YOLO11 Large",
|
|
258
|
-
description: "YOLO11 Large \u2014 high-accuracy large model",
|
|
385
|
+
description: "YOLO11 Large \u2014 high-accuracy large model (mAP 53.4)",
|
|
259
386
|
inputSize: { width: 640, height: 640 },
|
|
260
387
|
labels: import_types.COCO_80_LABELS,
|
|
261
388
|
formats: {
|
|
@@ -263,20 +390,29 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
263
390
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/onnx/camstack-yolo11l.onnx"),
|
|
264
391
|
sizeMB: 97
|
|
265
392
|
},
|
|
393
|
+
coreml: {
|
|
394
|
+
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/coreml/camstack-yolo11l.mlpackage"),
|
|
395
|
+
sizeMB: 49,
|
|
396
|
+
isDirectory: true,
|
|
397
|
+
files: MLPACKAGE_FILES,
|
|
398
|
+
runtimes: ["python"]
|
|
399
|
+
},
|
|
266
400
|
openvino: {
|
|
267
401
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/openvino/camstack-yolo11l.xml"),
|
|
268
|
-
sizeMB: 49
|
|
402
|
+
sizeMB: 49,
|
|
403
|
+
runtimes: ["python"]
|
|
269
404
|
},
|
|
270
405
|
tflite: {
|
|
271
406
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/tflite/camstack-yolo11l_float32.tflite"),
|
|
272
|
-
sizeMB: 97
|
|
407
|
+
sizeMB: 97,
|
|
408
|
+
runtimes: ["python"]
|
|
273
409
|
}
|
|
274
410
|
}
|
|
275
411
|
},
|
|
276
412
|
{
|
|
277
413
|
id: "yolo11x",
|
|
278
414
|
name: "YOLO11 Extra-Large",
|
|
279
|
-
description: "YOLO11 Extra-Large \u2014 maximum accuracy",
|
|
415
|
+
description: "YOLO11 Extra-Large \u2014 maximum accuracy (mAP 54.7)",
|
|
280
416
|
inputSize: { width: 640, height: 640 },
|
|
281
417
|
labels: import_types.COCO_80_LABELS,
|
|
282
418
|
formats: {
|
|
@@ -284,13 +420,22 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
284
420
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/onnx/camstack-yolo11x.onnx"),
|
|
285
421
|
sizeMB: 218
|
|
286
422
|
},
|
|
423
|
+
coreml: {
|
|
424
|
+
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/coreml/camstack-yolo11x.mlpackage"),
|
|
425
|
+
sizeMB: 109,
|
|
426
|
+
isDirectory: true,
|
|
427
|
+
files: MLPACKAGE_FILES,
|
|
428
|
+
runtimes: ["python"]
|
|
429
|
+
},
|
|
287
430
|
openvino: {
|
|
288
431
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/openvino/camstack-yolo11x.xml"),
|
|
289
|
-
sizeMB: 109
|
|
432
|
+
sizeMB: 109,
|
|
433
|
+
runtimes: ["python"]
|
|
290
434
|
},
|
|
291
435
|
tflite: {
|
|
292
436
|
url: (0, import_types.hfModelUrl)(HF_REPO, "objectDetection/yolo11/tflite/camstack-yolo11x_float32.tflite"),
|
|
293
|
-
sizeMB: 218
|
|
437
|
+
sizeMB: 218,
|
|
438
|
+
runtimes: ["python"]
|
|
294
439
|
}
|
|
295
440
|
}
|
|
296
441
|
}
|
|
@@ -300,7 +445,7 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
300
445
|
var import_types2 = require("@camstack/types");
|
|
301
446
|
var HF_REPO2 = "camstack/camstack-models";
|
|
302
447
|
var SEGMENTATION_MODELS = [
|
|
303
|
-
// YOLO11-seg
|
|
448
|
+
// ── YOLO11-seg ───────────────────────────────────────────────
|
|
304
449
|
{
|
|
305
450
|
id: "yolo11n-seg",
|
|
306
451
|
name: "YOLO11 Nano Segmentation",
|
|
@@ -312,9 +457,17 @@ var SEGMENTATION_MODELS = [
|
|
|
312
457
|
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolo11-seg/onnx/camstack-yolo11n-seg.onnx"),
|
|
313
458
|
sizeMB: 11
|
|
314
459
|
},
|
|
460
|
+
coreml: {
|
|
461
|
+
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolo11-seg/coreml/camstack-yolo11n-seg.mlpackage"),
|
|
462
|
+
sizeMB: 6,
|
|
463
|
+
isDirectory: true,
|
|
464
|
+
files: MLPACKAGE_FILES,
|
|
465
|
+
runtimes: ["python"]
|
|
466
|
+
},
|
|
315
467
|
openvino: {
|
|
316
468
|
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolo11-seg/openvino/camstack-yolo11n-seg.xml"),
|
|
317
|
-
sizeMB: 6
|
|
469
|
+
sizeMB: 6,
|
|
470
|
+
runtimes: ["python"]
|
|
318
471
|
}
|
|
319
472
|
}
|
|
320
473
|
},
|
|
@@ -329,9 +482,17 @@ var SEGMENTATION_MODELS = [
|
|
|
329
482
|
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolo11-seg/onnx/camstack-yolo11s-seg.onnx"),
|
|
330
483
|
sizeMB: 39
|
|
331
484
|
},
|
|
485
|
+
coreml: {
|
|
486
|
+
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolo11-seg/coreml/camstack-yolo11s-seg.mlpackage"),
|
|
487
|
+
sizeMB: 20,
|
|
488
|
+
isDirectory: true,
|
|
489
|
+
files: MLPACKAGE_FILES,
|
|
490
|
+
runtimes: ["python"]
|
|
491
|
+
},
|
|
332
492
|
openvino: {
|
|
333
493
|
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolo11-seg/openvino/camstack-yolo11s-seg.xml"),
|
|
334
|
-
sizeMB: 20
|
|
494
|
+
sizeMB: 20,
|
|
495
|
+
runtimes: ["python"]
|
|
335
496
|
}
|
|
336
497
|
}
|
|
337
498
|
},
|
|
@@ -346,13 +507,21 @@ var SEGMENTATION_MODELS = [
|
|
|
346
507
|
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolo11-seg/onnx/camstack-yolo11m-seg.onnx"),
|
|
347
508
|
sizeMB: 86
|
|
348
509
|
},
|
|
510
|
+
coreml: {
|
|
511
|
+
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolo11-seg/coreml/camstack-yolo11m-seg.mlpackage"),
|
|
512
|
+
sizeMB: 43,
|
|
513
|
+
isDirectory: true,
|
|
514
|
+
files: MLPACKAGE_FILES,
|
|
515
|
+
runtimes: ["python"]
|
|
516
|
+
},
|
|
349
517
|
openvino: {
|
|
350
518
|
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolo11-seg/openvino/camstack-yolo11m-seg.xml"),
|
|
351
|
-
sizeMB: 43
|
|
519
|
+
sizeMB: 43,
|
|
520
|
+
runtimes: ["python"]
|
|
352
521
|
}
|
|
353
522
|
}
|
|
354
523
|
},
|
|
355
|
-
// YOLOv8-seg — CoreML
|
|
524
|
+
// ── YOLOv8-seg — CoreML supported ─────────────────────────────
|
|
356
525
|
{
|
|
357
526
|
id: "yolov8n-seg",
|
|
358
527
|
name: "YOLOv8 Nano Segmentation",
|
|
@@ -366,11 +535,15 @@ var SEGMENTATION_MODELS = [
|
|
|
366
535
|
},
|
|
367
536
|
coreml: {
|
|
368
537
|
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolov8-seg/coreml/camstack-yolov8n-seg.mlpackage"),
|
|
369
|
-
sizeMB: 7
|
|
538
|
+
sizeMB: 7,
|
|
539
|
+
isDirectory: true,
|
|
540
|
+
files: MLPACKAGE_FILES,
|
|
541
|
+
runtimes: ["python"]
|
|
370
542
|
},
|
|
371
543
|
openvino: {
|
|
372
544
|
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolov8-seg/openvino/camstack-yolov8n-seg.xml"),
|
|
373
|
-
sizeMB: 7
|
|
545
|
+
sizeMB: 7,
|
|
546
|
+
runtimes: ["python"]
|
|
374
547
|
}
|
|
375
548
|
}
|
|
376
549
|
},
|
|
@@ -387,11 +560,15 @@ var SEGMENTATION_MODELS = [
|
|
|
387
560
|
},
|
|
388
561
|
coreml: {
|
|
389
562
|
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolov8-seg/coreml/camstack-yolov8s-seg.mlpackage"),
|
|
390
|
-
sizeMB: 23
|
|
563
|
+
sizeMB: 23,
|
|
564
|
+
isDirectory: true,
|
|
565
|
+
files: MLPACKAGE_FILES,
|
|
566
|
+
runtimes: ["python"]
|
|
391
567
|
},
|
|
392
568
|
openvino: {
|
|
393
569
|
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolov8-seg/openvino/camstack-yolov8s-seg.xml"),
|
|
394
|
-
sizeMB: 23
|
|
570
|
+
sizeMB: 23,
|
|
571
|
+
runtimes: ["python"]
|
|
395
572
|
}
|
|
396
573
|
}
|
|
397
574
|
},
|
|
@@ -408,11 +585,15 @@ var SEGMENTATION_MODELS = [
|
|
|
408
585
|
},
|
|
409
586
|
coreml: {
|
|
410
587
|
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolov8-seg/coreml/camstack-yolov8m-seg.mlpackage"),
|
|
411
|
-
sizeMB: 52
|
|
588
|
+
sizeMB: 52,
|
|
589
|
+
isDirectory: true,
|
|
590
|
+
files: MLPACKAGE_FILES,
|
|
591
|
+
runtimes: ["python"]
|
|
412
592
|
},
|
|
413
593
|
openvino: {
|
|
414
594
|
url: (0, import_types2.hfModelUrl)(HF_REPO2, "segmentation/yolov8-seg/openvino/camstack-yolov8m-seg.xml"),
|
|
415
|
-
sizeMB: 53
|
|
595
|
+
sizeMB: 53,
|
|
596
|
+
runtimes: ["python"]
|
|
416
597
|
}
|
|
417
598
|
}
|
|
418
599
|
}
|
|
@@ -724,6 +905,7 @@ var NodeInferenceEngine = class {
|
|
|
724
905
|
|
|
725
906
|
// src/shared/python-engine.ts
|
|
726
907
|
var import_node_child_process = require("child_process");
|
|
908
|
+
var import_core = require("@camstack/core");
|
|
727
909
|
var PythonInferenceEngine = class {
|
|
728
910
|
constructor(pythonPath, scriptPath, runtime, modelPath, extraArgs = []) {
|
|
729
911
|
this.pythonPath = pythonPath;
|
|
@@ -844,7 +1026,7 @@ var PythonInferenceEngine = class {
|
|
|
844
1026
|
var AUTO_BACKEND_PRIORITY = ["coreml", "cuda", "tensorrt", "cpu"];
|
|
845
1027
|
var BACKEND_TO_FORMAT = {
|
|
846
1028
|
cpu: "onnx",
|
|
847
|
-
coreml: "
|
|
1029
|
+
coreml: "onnx",
|
|
848
1030
|
cuda: "onnx",
|
|
849
1031
|
tensorrt: "onnx"
|
|
850
1032
|
};
|
|
@@ -872,7 +1054,7 @@ function modelExists(filePath) {
|
|
|
872
1054
|
}
|
|
873
1055
|
}
|
|
874
1056
|
async function resolveEngine(options) {
|
|
875
|
-
const { runtime, backend, modelEntry, modelsDir,
|
|
1057
|
+
const { runtime, backend, modelEntry, modelsDir, models } = options;
|
|
876
1058
|
let selectedFormat;
|
|
877
1059
|
let selectedBackend;
|
|
878
1060
|
if (runtime === "auto") {
|
|
@@ -906,18 +1088,18 @@ async function resolveEngine(options) {
|
|
|
906
1088
|
selectedFormat = fmt;
|
|
907
1089
|
selectedBackend = runtime === "onnx" ? backend || "cpu" : runtime;
|
|
908
1090
|
}
|
|
909
|
-
let modelPath
|
|
910
|
-
if (
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
1091
|
+
let modelPath;
|
|
1092
|
+
if (models) {
|
|
1093
|
+
modelPath = await models.ensure(modelEntry.id, selectedFormat);
|
|
1094
|
+
} else {
|
|
1095
|
+
modelPath = modelFilePath(modelsDir, modelEntry, selectedFormat);
|
|
1096
|
+
if (!modelExists(modelPath)) {
|
|
915
1097
|
throw new Error(
|
|
916
|
-
`resolveEngine: model file not found at ${modelPath} and no
|
|
1098
|
+
`resolveEngine: model file not found at ${modelPath} and no model service provided`
|
|
917
1099
|
);
|
|
918
1100
|
}
|
|
919
1101
|
}
|
|
920
|
-
if (selectedFormat === "onnx"
|
|
1102
|
+
if (selectedFormat === "onnx") {
|
|
921
1103
|
const engine = new NodeInferenceEngine(modelPath, selectedBackend);
|
|
922
1104
|
await engine.initialize();
|
|
923
1105
|
return { engine, format: selectedFormat, modelPath };
|
|
@@ -931,7 +1113,18 @@ async function resolveEngine(options) {
|
|
|
931
1113
|
const effectiveRuntime = runtime === "auto" ? selectedBackend : runtime;
|
|
932
1114
|
const scriptName = PYTHON_SCRIPT_MAP[effectiveRuntime];
|
|
933
1115
|
if (scriptName && pythonPath) {
|
|
934
|
-
const
|
|
1116
|
+
const candidates = [
|
|
1117
|
+
path2.join(__dirname, "../../python", scriptName),
|
|
1118
|
+
path2.join(__dirname, "../python", scriptName),
|
|
1119
|
+
path2.join(__dirname, "../../../python", scriptName)
|
|
1120
|
+
];
|
|
1121
|
+
const scriptPath = candidates.find((p) => fs.existsSync(p));
|
|
1122
|
+
if (!scriptPath) {
|
|
1123
|
+
throw new Error(
|
|
1124
|
+
`resolveEngine: Python script "${scriptName}" not found. Searched:
|
|
1125
|
+
${candidates.join("\n")}`
|
|
1126
|
+
);
|
|
1127
|
+
}
|
|
935
1128
|
const inputSize = Math.max(modelEntry.inputSize.width, modelEntry.inputSize.height);
|
|
936
1129
|
const engine = new PythonInferenceEngine(pythonPath, scriptPath, effectiveRuntime, modelPath, [
|
|
937
1130
|
`--input-size=${inputSize}`,
|
|
@@ -984,6 +1177,50 @@ function applyClassMap(detections, classMap) {
|
|
|
984
1177
|
class: classMap.mapping[d.class]
|
|
985
1178
|
}));
|
|
986
1179
|
}
|
|
1180
|
+
var RAM_ESTIMATES = {
|
|
1181
|
+
"yolov8n": 80,
|
|
1182
|
+
"yolov8s": 150,
|
|
1183
|
+
"yolov8s-relu": 150,
|
|
1184
|
+
"yolov8m": 300,
|
|
1185
|
+
"yolov8l": 500,
|
|
1186
|
+
"yolov8x": 800,
|
|
1187
|
+
"yolov9t": 60,
|
|
1188
|
+
"yolov9s": 120,
|
|
1189
|
+
"yolov9c": 300,
|
|
1190
|
+
"yolo11n": 70,
|
|
1191
|
+
"yolo11s": 130,
|
|
1192
|
+
"yolo11m": 280,
|
|
1193
|
+
"yolo11l": 450,
|
|
1194
|
+
"yolo11x": 750,
|
|
1195
|
+
"yolo11n-seg": 84,
|
|
1196
|
+
"yolo11s-seg": 156,
|
|
1197
|
+
"yolo11m-seg": 336,
|
|
1198
|
+
"yolov8n-seg": 96,
|
|
1199
|
+
"yolov8s-seg": 180,
|
|
1200
|
+
"yolov8m-seg": 360
|
|
1201
|
+
};
|
|
1202
|
+
var ACCURACY_SCORES = {
|
|
1203
|
+
"yolov8n": 55,
|
|
1204
|
+
"yolov8s": 70,
|
|
1205
|
+
"yolov8s-relu": 68,
|
|
1206
|
+
"yolov8m": 82,
|
|
1207
|
+
"yolov8l": 88,
|
|
1208
|
+
"yolov8x": 92,
|
|
1209
|
+
"yolov9t": 58,
|
|
1210
|
+
"yolov9s": 73,
|
|
1211
|
+
"yolov9c": 86,
|
|
1212
|
+
"yolo11n": 62,
|
|
1213
|
+
"yolo11s": 78,
|
|
1214
|
+
"yolo11m": 88,
|
|
1215
|
+
"yolo11l": 93,
|
|
1216
|
+
"yolo11x": 97,
|
|
1217
|
+
"yolo11n-seg": 62,
|
|
1218
|
+
"yolo11s-seg": 78,
|
|
1219
|
+
"yolo11m-seg": 88,
|
|
1220
|
+
"yolov8n-seg": 55,
|
|
1221
|
+
"yolov8s-seg": 70,
|
|
1222
|
+
"yolov8m-seg": 82
|
|
1223
|
+
};
|
|
987
1224
|
var ObjectDetectionAddon = class {
|
|
988
1225
|
id = "object-detection";
|
|
989
1226
|
slot = "detector";
|
|
@@ -995,31 +1232,43 @@ var ObjectDetectionAddon = class {
|
|
|
995
1232
|
name: "Object Detection",
|
|
996
1233
|
version: "0.1.0",
|
|
997
1234
|
description: "YOLO-based object detection \u2014 detects persons, vehicles, and animals",
|
|
998
|
-
packageName: "@camstack/addon-vision",
|
|
999
1235
|
slot: "detector",
|
|
1000
1236
|
inputClasses: void 0,
|
|
1001
1237
|
outputClasses: ["person", "vehicle", "animal"],
|
|
1002
1238
|
supportsCustomModels: true,
|
|
1003
1239
|
mayRequirePython: false,
|
|
1004
1240
|
defaultConfig: {
|
|
1005
|
-
modelId: "
|
|
1006
|
-
runtime: "
|
|
1241
|
+
modelId: "yolo11n",
|
|
1242
|
+
runtime: "node",
|
|
1007
1243
|
backend: "cpu",
|
|
1008
1244
|
confidence: 0.5,
|
|
1009
1245
|
iouThreshold: 0.45,
|
|
1010
1246
|
classMapMode: "macro"
|
|
1011
1247
|
}
|
|
1012
1248
|
};
|
|
1013
|
-
engine;
|
|
1249
|
+
engine = null;
|
|
1014
1250
|
modelEntry;
|
|
1015
1251
|
confidence = 0.5;
|
|
1016
1252
|
iouThreshold = 0.45;
|
|
1017
1253
|
classMapMode = "macro";
|
|
1254
|
+
resolvedConfig = null;
|
|
1255
|
+
ctx = null;
|
|
1256
|
+
getModelRequirements() {
|
|
1257
|
+
return ALL_DETECTION_MODELS.map((m) => ({
|
|
1258
|
+
modelId: m.id,
|
|
1259
|
+
name: m.name,
|
|
1260
|
+
minRAM_MB: RAM_ESTIMATES[m.id] ?? 100,
|
|
1261
|
+
accuracyScore: ACCURACY_SCORES[m.id] ?? 60,
|
|
1262
|
+
formats: Object.keys(m.formats)
|
|
1263
|
+
}));
|
|
1264
|
+
}
|
|
1265
|
+
configure(config) {
|
|
1266
|
+
this.resolvedConfig = config;
|
|
1267
|
+
}
|
|
1018
1268
|
async initialize(ctx) {
|
|
1269
|
+
this.ctx = ctx;
|
|
1019
1270
|
const cfg = ctx.addonConfig;
|
|
1020
|
-
const modelId = cfg["modelId"] ?? "
|
|
1021
|
-
const runtime = cfg["runtime"] ?? "auto";
|
|
1022
|
-
const backend = cfg["backend"] ?? "cpu";
|
|
1271
|
+
const modelId = cfg["modelId"] ?? this.resolvedConfig?.modelId ?? "yolo11n";
|
|
1023
1272
|
this.confidence = cfg["confidence"] ?? 0.5;
|
|
1024
1273
|
this.iouThreshold = cfg["iouThreshold"] ?? 0.45;
|
|
1025
1274
|
this.classMapMode = cfg["classMapMode"] ?? "macro";
|
|
@@ -1028,16 +1277,30 @@ var ObjectDetectionAddon = class {
|
|
|
1028
1277
|
throw new Error(`ObjectDetectionAddon: unknown modelId "${modelId}"`);
|
|
1029
1278
|
}
|
|
1030
1279
|
this.modelEntry = entry;
|
|
1031
|
-
const resolved = await resolveEngine({
|
|
1032
|
-
runtime,
|
|
1033
|
-
backend,
|
|
1034
|
-
modelEntry: entry,
|
|
1035
|
-
modelsDir: ctx.locationPaths.models
|
|
1036
|
-
});
|
|
1037
|
-
this.engine = resolved.engine;
|
|
1038
1280
|
}
|
|
1039
1281
|
async detect(frame) {
|
|
1282
|
+
if (!this.engine) await this.ensureEngine();
|
|
1040
1283
|
const start = Date.now();
|
|
1284
|
+
if ("runJpeg" in this.engine && typeof this.engine.runJpeg === "function") {
|
|
1285
|
+
const result = await this.engine.runJpeg(frame.data);
|
|
1286
|
+
const rawDets = result.detections ?? [];
|
|
1287
|
+
const detections2 = rawDets.map((d) => ({
|
|
1288
|
+
class: this.classMapMode === "all" ? d.className : import_types3.COCO_TO_MACRO.mapping[d.className] ?? d.className,
|
|
1289
|
+
originalClass: d.className,
|
|
1290
|
+
score: d.score,
|
|
1291
|
+
bbox: {
|
|
1292
|
+
x: d.bbox[0] * frame.width,
|
|
1293
|
+
y: d.bbox[1] * frame.height,
|
|
1294
|
+
w: (d.bbox[2] - d.bbox[0]) * frame.width,
|
|
1295
|
+
h: (d.bbox[3] - d.bbox[1]) * frame.height
|
|
1296
|
+
}
|
|
1297
|
+
})).filter((d) => this.classMapMode === "all" || import_types3.COCO_TO_MACRO.mapping[d.originalClass] !== void 0);
|
|
1298
|
+
return {
|
|
1299
|
+
detections: detections2,
|
|
1300
|
+
inferenceMs: result.inferenceMs ?? Date.now() - start,
|
|
1301
|
+
modelId: this.modelEntry.id
|
|
1302
|
+
};
|
|
1303
|
+
}
|
|
1041
1304
|
const { width: inputW, height: inputH } = this.modelEntry.inputSize;
|
|
1042
1305
|
const targetSize = Math.max(inputW, inputH);
|
|
1043
1306
|
const lb = await letterbox(frame.data, targetSize);
|
|
@@ -1092,6 +1355,40 @@ var ObjectDetectionAddon = class {
|
|
|
1092
1355
|
modelId: this.modelEntry.id
|
|
1093
1356
|
};
|
|
1094
1357
|
}
|
|
1358
|
+
async ensureEngine() {
|
|
1359
|
+
const config = this.resolvedConfig;
|
|
1360
|
+
const modelId = config?.modelId ?? this.modelEntry.id;
|
|
1361
|
+
const runtime = config?.runtime === "python" ? "coreml" : config?.runtime === "node" ? "onnx" : "auto";
|
|
1362
|
+
const backend = config?.backend ?? "cpu";
|
|
1363
|
+
const format = config?.format ?? "onnx";
|
|
1364
|
+
const entry = ALL_DETECTION_MODELS.find((m) => m.id === modelId) ?? this.modelEntry;
|
|
1365
|
+
this.modelEntry = entry;
|
|
1366
|
+
const modelsDir = this.ctx.models?.getModelsDir() ?? this.ctx.locationPaths.models;
|
|
1367
|
+
if (this.ctx.models) {
|
|
1368
|
+
await this.ctx.models.ensure(modelId, format);
|
|
1369
|
+
}
|
|
1370
|
+
let pythonPath;
|
|
1371
|
+
if (config?.runtime === "python") {
|
|
1372
|
+
for (const cmd of ["python3", "python"]) {
|
|
1373
|
+
try {
|
|
1374
|
+
const { execSync } = await import("child_process");
|
|
1375
|
+
execSync(`${cmd} --version`, { timeout: 3e3, stdio: "ignore" });
|
|
1376
|
+
pythonPath = cmd;
|
|
1377
|
+
break;
|
|
1378
|
+
} catch {
|
|
1379
|
+
}
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
const resolved = await resolveEngine({
|
|
1383
|
+
runtime,
|
|
1384
|
+
backend,
|
|
1385
|
+
modelEntry: entry,
|
|
1386
|
+
modelsDir,
|
|
1387
|
+
pythonPath,
|
|
1388
|
+
models: this.ctx.models
|
|
1389
|
+
});
|
|
1390
|
+
this.engine = resolved.engine;
|
|
1391
|
+
}
|
|
1095
1392
|
async shutdown() {
|
|
1096
1393
|
await this.engine?.dispose();
|
|
1097
1394
|
}
|
|
@@ -1101,7 +1398,7 @@ var ObjectDetectionAddon = class {
|
|
|
1101
1398
|
{
|
|
1102
1399
|
id: "model",
|
|
1103
1400
|
title: "Model",
|
|
1104
|
-
columns:
|
|
1401
|
+
columns: 1,
|
|
1105
1402
|
fields: [
|
|
1106
1403
|
{
|
|
1107
1404
|
key: "modelId",
|
|
@@ -1126,7 +1423,7 @@ var ObjectDetectionAddon = class {
|
|
|
1126
1423
|
label: "Runtime",
|
|
1127
1424
|
type: "select",
|
|
1128
1425
|
options: [
|
|
1129
|
-
{ value: "auto", label: "Auto
|
|
1426
|
+
{ value: "auto", label: "Auto" },
|
|
1130
1427
|
{ value: "onnx", label: "ONNX Runtime" },
|
|
1131
1428
|
{ value: "coreml", label: "CoreML (Apple)" },
|
|
1132
1429
|
{ value: "openvino", label: "OpenVINO (Intel)" }
|
|
@@ -1136,8 +1433,9 @@ var ObjectDetectionAddon = class {
|
|
|
1136
1433
|
key: "backend",
|
|
1137
1434
|
label: "Backend",
|
|
1138
1435
|
type: "select",
|
|
1139
|
-
|
|
1436
|
+
showWhen: { field: "runtime", equals: "onnx" },
|
|
1140
1437
|
options: [
|
|
1438
|
+
{ value: "auto", label: "Auto" },
|
|
1141
1439
|
{ value: "cpu", label: "CPU" },
|
|
1142
1440
|
{ value: "coreml", label: "CoreML" },
|
|
1143
1441
|
{ value: "cuda", label: "CUDA (NVIDIA)" },
|