@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.
Files changed (131) hide show
  1. package/dist/addons/animal-classifier/index.d.mts +6 -1
  2. package/dist/addons/animal-classifier/index.d.ts +6 -1
  3. package/dist/addons/animal-classifier/index.js +514 -49
  4. package/dist/addons/animal-classifier/index.js.map +1 -1
  5. package/dist/addons/animal-classifier/index.mjs +6 -4
  6. package/dist/addons/audio-classification/index.d.mts +6 -1
  7. package/dist/addons/audio-classification/index.d.ts +6 -1
  8. package/dist/addons/audio-classification/index.js +87 -26
  9. package/dist/addons/audio-classification/index.js.map +1 -1
  10. package/dist/addons/audio-classification/index.mjs +3 -2
  11. package/dist/addons/bird-global-classifier/index.d.mts +6 -1
  12. package/dist/addons/bird-global-classifier/index.d.ts +6 -1
  13. package/dist/addons/bird-global-classifier/index.js +515 -50
  14. package/dist/addons/bird-global-classifier/index.js.map +1 -1
  15. package/dist/addons/bird-global-classifier/index.mjs +6 -4
  16. package/dist/addons/bird-nabirds-classifier/index.d.mts +6 -1
  17. package/dist/addons/bird-nabirds-classifier/index.d.ts +6 -1
  18. package/dist/addons/bird-nabirds-classifier/index.js +524 -60
  19. package/dist/addons/bird-nabirds-classifier/index.js.map +1 -1
  20. package/dist/addons/bird-nabirds-classifier/index.mjs +6 -4
  21. package/dist/addons/face-detection/index.d.mts +6 -1
  22. package/dist/addons/face-detection/index.d.ts +6 -1
  23. package/dist/addons/face-detection/index.js +539 -39
  24. package/dist/addons/face-detection/index.js.map +1 -1
  25. package/dist/addons/face-detection/index.mjs +5 -3
  26. package/dist/addons/face-recognition/index.d.mts +6 -1
  27. package/dist/addons/face-recognition/index.d.ts +6 -1
  28. package/dist/addons/face-recognition/index.js +488 -33
  29. package/dist/addons/face-recognition/index.js.map +1 -1
  30. package/dist/addons/face-recognition/index.mjs +5 -3
  31. package/dist/addons/motion-detection/index.d.mts +3 -1
  32. package/dist/addons/motion-detection/index.d.ts +3 -1
  33. package/dist/addons/motion-detection/index.js +11 -3
  34. package/dist/addons/motion-detection/index.js.map +1 -1
  35. package/dist/addons/motion-detection/index.mjs +140 -3
  36. package/dist/addons/motion-detection/index.mjs.map +1 -1
  37. package/dist/addons/object-detection/index.d.mts +6 -1
  38. package/dist/addons/object-detection/index.d.ts +6 -1
  39. package/dist/addons/object-detection/index.js +370 -72
  40. package/dist/addons/object-detection/index.js.map +1 -1
  41. package/dist/addons/object-detection/index.mjs +5 -3
  42. package/dist/addons/plate-detection/index.d.mts +6 -1
  43. package/dist/addons/plate-detection/index.d.ts +6 -1
  44. package/dist/addons/plate-detection/index.js +532 -31
  45. package/dist/addons/plate-detection/index.js.map +1 -1
  46. package/dist/addons/plate-detection/index.mjs +5 -3
  47. package/dist/addons/plate-recognition/index.d.mts +7 -1
  48. package/dist/addons/plate-recognition/index.d.ts +7 -1
  49. package/dist/addons/plate-recognition/index.js +177 -44
  50. package/dist/addons/plate-recognition/index.js.map +1 -1
  51. package/dist/addons/plate-recognition/index.mjs +4 -3
  52. package/dist/addons/segmentation-refiner/index.d.mts +30 -0
  53. package/dist/addons/segmentation-refiner/index.d.ts +30 -0
  54. package/dist/addons/segmentation-refiner/index.js +1049 -0
  55. package/dist/addons/segmentation-refiner/index.js.map +1 -0
  56. package/dist/addons/segmentation-refiner/index.mjs +209 -0
  57. package/dist/addons/segmentation-refiner/index.mjs.map +1 -0
  58. package/dist/addons/vehicle-classifier/index.d.mts +31 -0
  59. package/dist/addons/vehicle-classifier/index.d.ts +31 -0
  60. package/dist/addons/vehicle-classifier/index.js +689 -0
  61. package/dist/addons/vehicle-classifier/index.js.map +1 -0
  62. package/dist/addons/vehicle-classifier/index.mjs +250 -0
  63. package/dist/addons/vehicle-classifier/index.mjs.map +1 -0
  64. package/dist/{chunk-6OR5TE7A.mjs → chunk-22BHCDT5.mjs} +2 -2
  65. package/dist/chunk-22BHCDT5.mjs.map +1 -0
  66. package/dist/{chunk-LPI42WL6.mjs → chunk-6DJZZR64.mjs} +24 -12
  67. package/dist/chunk-6DJZZR64.mjs.map +1 -0
  68. package/dist/chunk-7DYHXUPZ.mjs +36 -0
  69. package/dist/chunk-7DYHXUPZ.mjs.map +1 -0
  70. package/dist/chunk-BJTO5JO5.mjs +11 -0
  71. package/dist/chunk-BP7H4NFS.mjs +412 -0
  72. package/dist/chunk-BP7H4NFS.mjs.map +1 -0
  73. package/dist/chunk-BR2FPGOX.mjs +98 -0
  74. package/dist/chunk-BR2FPGOX.mjs.map +1 -0
  75. package/dist/{chunk-B3R66MPF.mjs → chunk-DNQNGDR4.mjs} +58 -21
  76. package/dist/chunk-DNQNGDR4.mjs.map +1 -0
  77. package/dist/{chunk-ISOIDU4U.mjs → chunk-DUN6XU3N.mjs} +23 -5
  78. package/dist/chunk-DUN6XU3N.mjs.map +1 -0
  79. package/dist/{chunk-MEVASN3P.mjs → chunk-EPNWLSCG.mjs} +104 -22
  80. package/dist/chunk-EPNWLSCG.mjs.map +1 -0
  81. package/dist/{chunk-AYBFB7ID.mjs → chunk-G32RCIUI.mjs} +200 -318
  82. package/dist/chunk-G32RCIUI.mjs.map +1 -0
  83. package/dist/{chunk-3MQFUDRU.mjs → chunk-GR65KM6X.mjs} +76 -47
  84. package/dist/chunk-GR65KM6X.mjs.map +1 -0
  85. package/dist/{chunk-5AIQSN32.mjs → chunk-H7LMBTS5.mjs} +66 -17
  86. package/dist/chunk-H7LMBTS5.mjs.map +1 -0
  87. package/dist/{chunk-J4WRYHHY.mjs → chunk-IK4XIQPC.mjs} +66 -36
  88. package/dist/chunk-IK4XIQPC.mjs.map +1 -0
  89. package/dist/{chunk-5JJZGKL7.mjs → chunk-J6VNIIYX.mjs} +102 -19
  90. package/dist/chunk-J6VNIIYX.mjs.map +1 -0
  91. package/dist/{chunk-Q3SQOYG6.mjs → chunk-ML2JX43J.mjs} +67 -37
  92. package/dist/chunk-ML2JX43J.mjs.map +1 -0
  93. package/dist/{chunk-PDSHDDPV.mjs → chunk-WUMV524J.mjs} +159 -35
  94. package/dist/chunk-WUMV524J.mjs.map +1 -0
  95. package/dist/chunk-XZ6ZMXXU.mjs +39 -0
  96. package/dist/chunk-XZ6ZMXXU.mjs.map +1 -0
  97. package/dist/index.d.mts +17 -5
  98. package/dist/index.d.ts +17 -5
  99. package/dist/index.js +1344 -550
  100. package/dist/index.js.map +1 -1
  101. package/dist/index.mjs +191 -20
  102. package/dist/index.mjs.map +1 -1
  103. package/package.json +95 -18
  104. package/python/coreml_inference.py +61 -18
  105. package/python/openvino_inference.py +12 -4
  106. package/python/pytorch_inference.py +12 -4
  107. package/dist/addons/camera-native-detection/index.d.mts +0 -32
  108. package/dist/addons/camera-native-detection/index.d.ts +0 -32
  109. package/dist/addons/camera-native-detection/index.js +0 -99
  110. package/dist/addons/camera-native-detection/index.js.map +0 -1
  111. package/dist/addons/camera-native-detection/index.mjs +0 -7
  112. package/dist/chunk-3MQFUDRU.mjs.map +0 -1
  113. package/dist/chunk-5AIQSN32.mjs.map +0 -1
  114. package/dist/chunk-5JJZGKL7.mjs.map +0 -1
  115. package/dist/chunk-6OR5TE7A.mjs.map +0 -1
  116. package/dist/chunk-AYBFB7ID.mjs.map +0 -1
  117. package/dist/chunk-B3R66MPF.mjs.map +0 -1
  118. package/dist/chunk-DTOAB2CE.mjs +0 -79
  119. package/dist/chunk-DTOAB2CE.mjs.map +0 -1
  120. package/dist/chunk-ISOIDU4U.mjs.map +0 -1
  121. package/dist/chunk-J4WRYHHY.mjs.map +0 -1
  122. package/dist/chunk-LPI42WL6.mjs.map +0 -1
  123. package/dist/chunk-MEVASN3P.mjs.map +0 -1
  124. package/dist/chunk-PDSHDDPV.mjs.map +0 -1
  125. package/dist/chunk-Q3SQOYG6.mjs.map +0 -1
  126. package/dist/chunk-QIMDG34B.mjs +0 -229
  127. package/dist/chunk-QIMDG34B.mjs.map +0 -1
  128. package/python/__pycache__/coreml_inference.cpython-313.pyc +0 -0
  129. package/python/__pycache__/openvino_inference.cpython-313.pyc +0 -0
  130. package/python/__pycache__/pytorch_inference.cpython-313.pyc +0 -0
  131. /package/dist/{addons/camera-native-detection/index.mjs.map → chunk-BJTO5JO5.mjs.map} +0 -0
@@ -2,294 +2,44 @@ import {
2
2
  nms,
3
3
  yoloPostprocess
4
4
  } from "./chunk-KUO2BVFY.mjs";
5
+ import {
6
+ MLPACKAGE_FILES,
7
+ OBJECT_DETECTION_MODELS
8
+ } from "./chunk-BP7H4NFS.mjs";
5
9
  import {
6
10
  letterbox
7
- } from "./chunk-6OR5TE7A.mjs";
11
+ } from "./chunk-22BHCDT5.mjs";
8
12
  import {
9
13
  resolveEngine
10
- } from "./chunk-LPI42WL6.mjs";
14
+ } from "./chunk-6DJZZR64.mjs";
11
15
 
12
- // src/catalogs/object-detection-models.ts
16
+ // src/catalogs/segmentation-models.ts
13
17
  import { hfModelUrl, COCO_80_LABELS } from "@camstack/types";
14
18
  var HF_REPO = "camstack/camstack-models";
15
- var OBJECT_DETECTION_MODELS = [
16
- {
17
- id: "yolov8n",
18
- name: "YOLOv8 Nano",
19
- description: "YOLOv8 Nano \u2014 fastest, smallest object detection model",
20
- inputSize: { width: 640, height: 640 },
21
- labels: COCO_80_LABELS,
22
- formats: {
23
- onnx: {
24
- url: hfModelUrl(HF_REPO, "objectDetection/yolov8/onnx/camstack-yolov8n.onnx"),
25
- sizeMB: 12
26
- },
27
- coreml: {
28
- url: hfModelUrl(HF_REPO, "objectDetection/yolov8/coreml/camstack-yolov8n.mlpackage"),
29
- sizeMB: 6
30
- },
31
- openvino: {
32
- url: hfModelUrl(HF_REPO, "objectDetection/yolov8/openvino/camstack-yolov8n.xml"),
33
- sizeMB: 7
34
- },
35
- tflite: {
36
- url: hfModelUrl(HF_REPO, "objectDetection/yolov8/tflite/camstack-yolov8n_float32.tflite"),
37
- sizeMB: 12
38
- }
39
- }
40
- },
41
- {
42
- id: "yolov8s",
43
- name: "YOLOv8 Small",
44
- description: "YOLOv8 Small \u2014 balanced speed and accuracy",
45
- inputSize: { width: 640, height: 640 },
46
- labels: COCO_80_LABELS,
47
- formats: {
48
- onnx: {
49
- url: hfModelUrl(HF_REPO, "objectDetection/yolov8/onnx/camstack-yolov8s.onnx"),
50
- sizeMB: 43
51
- },
52
- coreml: {
53
- url: hfModelUrl(HF_REPO, "objectDetection/yolov8/coreml/camstack-yolov8s.mlpackage"),
54
- sizeMB: 21
55
- },
56
- openvino: {
57
- url: hfModelUrl(HF_REPO, "objectDetection/yolov8/openvino/camstack-yolov8s.xml"),
58
- sizeMB: 22
59
- },
60
- tflite: {
61
- url: hfModelUrl(HF_REPO, "objectDetection/yolov8/tflite/camstack-yolov8s_float32.tflite"),
62
- sizeMB: 43
63
- }
64
- }
65
- },
66
- {
67
- id: "yolov8m",
68
- name: "YOLOv8 Medium",
69
- description: "YOLOv8 Medium \u2014 higher accuracy, moderate size",
70
- inputSize: { width: 640, height: 640 },
71
- labels: COCO_80_LABELS,
72
- formats: {
73
- onnx: {
74
- url: hfModelUrl(HF_REPO, "objectDetection/yolov8/onnx/camstack-yolov8m.onnx"),
75
- sizeMB: 99
76
- },
77
- coreml: {
78
- url: hfModelUrl(HF_REPO, "objectDetection/yolov8/coreml/camstack-yolov8m.mlpackage"),
79
- sizeMB: 49
80
- },
81
- openvino: {
82
- url: hfModelUrl(HF_REPO, "objectDetection/yolov8/openvino/camstack-yolov8m.xml"),
83
- sizeMB: 50
84
- },
85
- tflite: {
86
- url: hfModelUrl(HF_REPO, "objectDetection/yolov8/tflite/camstack-yolov8m_float32.tflite"),
87
- sizeMB: 99
88
- }
89
- }
90
- },
91
- {
92
- id: "yolov9t",
93
- name: "YOLOv9 Tiny",
94
- description: "YOLOv9 Tiny \u2014 ultra-lightweight next-gen detector",
95
- inputSize: { width: 640, height: 640 },
96
- labels: COCO_80_LABELS,
97
- formats: {
98
- onnx: {
99
- url: hfModelUrl(HF_REPO, "objectDetection/yolov9/onnx/camstack-yolov9t.onnx"),
100
- sizeMB: 8
101
- },
102
- coreml: {
103
- url: hfModelUrl(HF_REPO, "objectDetection/yolov9/coreml/camstack-yolov9t.mlpackage"),
104
- sizeMB: 4
105
- },
106
- openvino: {
107
- url: hfModelUrl(HF_REPO, "objectDetection/yolov9/openvino/camstack-yolov9t.xml"),
108
- sizeMB: 6
109
- },
110
- tflite: {
111
- url: hfModelUrl(HF_REPO, "objectDetection/yolov9/tflite/camstack-yolov9t_float32.tflite"),
112
- sizeMB: 8
113
- }
114
- }
115
- },
116
- {
117
- id: "yolov9s",
118
- name: "YOLOv9 Small",
119
- description: "YOLOv9 Small \u2014 improved efficiency over YOLOv8s",
120
- inputSize: { width: 640, height: 640 },
121
- labels: COCO_80_LABELS,
122
- formats: {
123
- onnx: {
124
- url: hfModelUrl(HF_REPO, "objectDetection/yolov9/onnx/camstack-yolov9s.onnx"),
125
- sizeMB: 28
126
- },
127
- coreml: {
128
- url: hfModelUrl(HF_REPO, "objectDetection/yolov9/coreml/camstack-yolov9s.mlpackage"),
129
- sizeMB: 14
130
- },
131
- openvino: {
132
- url: hfModelUrl(HF_REPO, "objectDetection/yolov9/openvino/camstack-yolov9s.xml"),
133
- sizeMB: 16
134
- },
135
- tflite: {
136
- url: hfModelUrl(HF_REPO, "objectDetection/yolov9/tflite/camstack-yolov9s_float32.tflite"),
137
- sizeMB: 28
138
- }
139
- }
140
- },
141
- {
142
- id: "yolov9c",
143
- name: "YOLOv9 C",
144
- description: "YOLOv9 C \u2014 high-accuracy compact model",
145
- inputSize: { width: 640, height: 640 },
146
- labels: COCO_80_LABELS,
147
- formats: {
148
- onnx: {
149
- url: hfModelUrl(HF_REPO, "objectDetection/yolov9/onnx/camstack-yolov9c.onnx"),
150
- sizeMB: 97
151
- },
152
- coreml: {
153
- url: hfModelUrl(HF_REPO, "objectDetection/yolov9/coreml/camstack-yolov9c.mlpackage"),
154
- sizeMB: 48
155
- },
156
- openvino: {
157
- url: hfModelUrl(HF_REPO, "objectDetection/yolov9/openvino/camstack-yolov9c.xml"),
158
- sizeMB: 49
159
- },
160
- tflite: {
161
- url: hfModelUrl(HF_REPO, "objectDetection/yolov9/tflite/camstack-yolov9c_float32.tflite"),
162
- sizeMB: 97
163
- }
164
- }
165
- },
166
- // YOLO11 — no CoreML (coremltools incompatible)
167
- {
168
- id: "yolo11n",
169
- name: "YOLO11 Nano",
170
- description: "YOLO11 Nano \u2014 fastest, smallest YOLO11 detection model",
171
- inputSize: { width: 640, height: 640 },
172
- labels: COCO_80_LABELS,
173
- formats: {
174
- onnx: {
175
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/onnx/camstack-yolo11n.onnx"),
176
- sizeMB: 10
177
- },
178
- openvino: {
179
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/openvino/camstack-yolo11n.xml"),
180
- sizeMB: 5.4
181
- },
182
- tflite: {
183
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/tflite/camstack-yolo11n_float32.tflite"),
184
- sizeMB: 10
185
- }
186
- }
187
- },
188
- {
189
- id: "yolo11s",
190
- name: "YOLO11 Small",
191
- description: "YOLO11 Small \u2014 balanced speed and accuracy",
192
- inputSize: { width: 640, height: 640 },
193
- labels: COCO_80_LABELS,
194
- formats: {
195
- onnx: {
196
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/onnx/camstack-yolo11s.onnx"),
197
- sizeMB: 36
198
- },
199
- openvino: {
200
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/openvino/camstack-yolo11s.xml"),
201
- sizeMB: 18
202
- },
203
- tflite: {
204
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/tflite/camstack-yolo11s_float32.tflite"),
205
- sizeMB: 36
206
- }
207
- }
208
- },
209
- {
210
- id: "yolo11m",
211
- name: "YOLO11 Medium",
212
- description: "YOLO11 Medium \u2014 higher accuracy, moderate size",
213
- inputSize: { width: 640, height: 640 },
214
- labels: COCO_80_LABELS,
215
- formats: {
216
- onnx: {
217
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/onnx/camstack-yolo11m.onnx"),
218
- sizeMB: 77
219
- },
220
- openvino: {
221
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/openvino/camstack-yolo11m.xml"),
222
- sizeMB: 39
223
- },
224
- tflite: {
225
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/tflite/camstack-yolo11m_float32.tflite"),
226
- sizeMB: 77
227
- }
228
- }
229
- },
230
- {
231
- id: "yolo11l",
232
- name: "YOLO11 Large",
233
- description: "YOLO11 Large \u2014 high-accuracy large model",
234
- inputSize: { width: 640, height: 640 },
235
- labels: COCO_80_LABELS,
236
- formats: {
237
- onnx: {
238
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/onnx/camstack-yolo11l.onnx"),
239
- sizeMB: 97
240
- },
241
- openvino: {
242
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/openvino/camstack-yolo11l.xml"),
243
- sizeMB: 49
244
- },
245
- tflite: {
246
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/tflite/camstack-yolo11l_float32.tflite"),
247
- sizeMB: 97
248
- }
249
- }
250
- },
251
- {
252
- id: "yolo11x",
253
- name: "YOLO11 Extra-Large",
254
- description: "YOLO11 Extra-Large \u2014 maximum accuracy",
255
- inputSize: { width: 640, height: 640 },
256
- labels: COCO_80_LABELS,
257
- formats: {
258
- onnx: {
259
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/onnx/camstack-yolo11x.onnx"),
260
- sizeMB: 218
261
- },
262
- openvino: {
263
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/openvino/camstack-yolo11x.xml"),
264
- sizeMB: 109
265
- },
266
- tflite: {
267
- url: hfModelUrl(HF_REPO, "objectDetection/yolo11/tflite/camstack-yolo11x_float32.tflite"),
268
- sizeMB: 218
269
- }
270
- }
271
- }
272
- ];
273
-
274
- // src/catalogs/segmentation-models.ts
275
- import { hfModelUrl as hfModelUrl2, COCO_80_LABELS as COCO_80_LABELS2 } from "@camstack/types";
276
- var HF_REPO2 = "camstack/camstack-models";
277
19
  var SEGMENTATION_MODELS = [
278
- // YOLO11-seg — no CoreML (coremltools incompatible)
20
+ // ── YOLO11-seg ───────────────────────────────────────────────
279
21
  {
280
22
  id: "yolo11n-seg",
281
23
  name: "YOLO11 Nano Segmentation",
282
24
  description: "YOLO11 Nano \u2014 fastest, smallest YOLO11 instance segmentation model",
283
25
  inputSize: { width: 640, height: 640 },
284
- labels: COCO_80_LABELS2,
26
+ labels: COCO_80_LABELS,
285
27
  formats: {
286
28
  onnx: {
287
- url: hfModelUrl2(HF_REPO2, "segmentation/yolo11-seg/onnx/camstack-yolo11n-seg.onnx"),
29
+ url: hfModelUrl(HF_REPO, "segmentation/yolo11-seg/onnx/camstack-yolo11n-seg.onnx"),
288
30
  sizeMB: 11
289
31
  },
32
+ coreml: {
33
+ url: hfModelUrl(HF_REPO, "segmentation/yolo11-seg/coreml/camstack-yolo11n-seg.mlpackage"),
34
+ sizeMB: 6,
35
+ isDirectory: true,
36
+ files: MLPACKAGE_FILES,
37
+ runtimes: ["python"]
38
+ },
290
39
  openvino: {
291
- url: hfModelUrl2(HF_REPO2, "segmentation/yolo11-seg/openvino/camstack-yolo11n-seg.xml"),
292
- sizeMB: 6
40
+ url: hfModelUrl(HF_REPO, "segmentation/yolo11-seg/openvino/camstack-yolo11n-seg.xml"),
41
+ sizeMB: 6,
42
+ runtimes: ["python"]
293
43
  }
294
44
  }
295
45
  },
@@ -298,15 +48,23 @@ var SEGMENTATION_MODELS = [
298
48
  name: "YOLO11 Small Segmentation",
299
49
  description: "YOLO11 Small \u2014 balanced speed and accuracy for instance segmentation",
300
50
  inputSize: { width: 640, height: 640 },
301
- labels: COCO_80_LABELS2,
51
+ labels: COCO_80_LABELS,
302
52
  formats: {
303
53
  onnx: {
304
- url: hfModelUrl2(HF_REPO2, "segmentation/yolo11-seg/onnx/camstack-yolo11s-seg.onnx"),
54
+ url: hfModelUrl(HF_REPO, "segmentation/yolo11-seg/onnx/camstack-yolo11s-seg.onnx"),
305
55
  sizeMB: 39
306
56
  },
57
+ coreml: {
58
+ url: hfModelUrl(HF_REPO, "segmentation/yolo11-seg/coreml/camstack-yolo11s-seg.mlpackage"),
59
+ sizeMB: 20,
60
+ isDirectory: true,
61
+ files: MLPACKAGE_FILES,
62
+ runtimes: ["python"]
63
+ },
307
64
  openvino: {
308
- url: hfModelUrl2(HF_REPO2, "segmentation/yolo11-seg/openvino/camstack-yolo11s-seg.xml"),
309
- sizeMB: 20
65
+ url: hfModelUrl(HF_REPO, "segmentation/yolo11-seg/openvino/camstack-yolo11s-seg.xml"),
66
+ sizeMB: 20,
67
+ runtimes: ["python"]
310
68
  }
311
69
  }
312
70
  },
@@ -315,37 +73,49 @@ var SEGMENTATION_MODELS = [
315
73
  name: "YOLO11 Medium Segmentation",
316
74
  description: "YOLO11 Medium \u2014 higher accuracy instance segmentation",
317
75
  inputSize: { width: 640, height: 640 },
318
- labels: COCO_80_LABELS2,
76
+ labels: COCO_80_LABELS,
319
77
  formats: {
320
78
  onnx: {
321
- url: hfModelUrl2(HF_REPO2, "segmentation/yolo11-seg/onnx/camstack-yolo11m-seg.onnx"),
79
+ url: hfModelUrl(HF_REPO, "segmentation/yolo11-seg/onnx/camstack-yolo11m-seg.onnx"),
322
80
  sizeMB: 86
323
81
  },
82
+ coreml: {
83
+ url: hfModelUrl(HF_REPO, "segmentation/yolo11-seg/coreml/camstack-yolo11m-seg.mlpackage"),
84
+ sizeMB: 43,
85
+ isDirectory: true,
86
+ files: MLPACKAGE_FILES,
87
+ runtimes: ["python"]
88
+ },
324
89
  openvino: {
325
- url: hfModelUrl2(HF_REPO2, "segmentation/yolo11-seg/openvino/camstack-yolo11m-seg.xml"),
326
- sizeMB: 43
90
+ url: hfModelUrl(HF_REPO, "segmentation/yolo11-seg/openvino/camstack-yolo11m-seg.xml"),
91
+ sizeMB: 43,
92
+ runtimes: ["python"]
327
93
  }
328
94
  }
329
95
  },
330
- // YOLOv8-seg — CoreML available
96
+ // ── YOLOv8-seg — CoreML supported ─────────────────────────────
331
97
  {
332
98
  id: "yolov8n-seg",
333
99
  name: "YOLOv8 Nano Segmentation",
334
100
  description: "YOLOv8 Nano \u2014 fastest, smallest YOLOv8 instance segmentation model",
335
101
  inputSize: { width: 640, height: 640 },
336
- labels: COCO_80_LABELS2,
102
+ labels: COCO_80_LABELS,
337
103
  formats: {
338
104
  onnx: {
339
- url: hfModelUrl2(HF_REPO2, "segmentation/yolov8-seg/onnx/camstack-yolov8n-seg.onnx"),
105
+ url: hfModelUrl(HF_REPO, "segmentation/yolov8-seg/onnx/camstack-yolov8n-seg.onnx"),
340
106
  sizeMB: 13
341
107
  },
342
108
  coreml: {
343
- url: hfModelUrl2(HF_REPO2, "segmentation/yolov8-seg/coreml/camstack-yolov8n-seg.mlpackage"),
344
- sizeMB: 7
109
+ url: hfModelUrl(HF_REPO, "segmentation/yolov8-seg/coreml/camstack-yolov8n-seg.mlpackage"),
110
+ sizeMB: 7,
111
+ isDirectory: true,
112
+ files: MLPACKAGE_FILES,
113
+ runtimes: ["python"]
345
114
  },
346
115
  openvino: {
347
- url: hfModelUrl2(HF_REPO2, "segmentation/yolov8-seg/openvino/camstack-yolov8n-seg.xml"),
348
- sizeMB: 7
116
+ url: hfModelUrl(HF_REPO, "segmentation/yolov8-seg/openvino/camstack-yolov8n-seg.xml"),
117
+ sizeMB: 7,
118
+ runtimes: ["python"]
349
119
  }
350
120
  }
351
121
  },
@@ -354,19 +124,23 @@ var SEGMENTATION_MODELS = [
354
124
  name: "YOLOv8 Small Segmentation",
355
125
  description: "YOLOv8 Small \u2014 balanced speed and accuracy for instance segmentation",
356
126
  inputSize: { width: 640, height: 640 },
357
- labels: COCO_80_LABELS2,
127
+ labels: COCO_80_LABELS,
358
128
  formats: {
359
129
  onnx: {
360
- url: hfModelUrl2(HF_REPO2, "segmentation/yolov8-seg/onnx/camstack-yolov8s-seg.onnx"),
130
+ url: hfModelUrl(HF_REPO, "segmentation/yolov8-seg/onnx/camstack-yolov8s-seg.onnx"),
361
131
  sizeMB: 45
362
132
  },
363
133
  coreml: {
364
- url: hfModelUrl2(HF_REPO2, "segmentation/yolov8-seg/coreml/camstack-yolov8s-seg.mlpackage"),
365
- sizeMB: 23
134
+ url: hfModelUrl(HF_REPO, "segmentation/yolov8-seg/coreml/camstack-yolov8s-seg.mlpackage"),
135
+ sizeMB: 23,
136
+ isDirectory: true,
137
+ files: MLPACKAGE_FILES,
138
+ runtimes: ["python"]
366
139
  },
367
140
  openvino: {
368
- url: hfModelUrl2(HF_REPO2, "segmentation/yolov8-seg/openvino/camstack-yolov8s-seg.xml"),
369
- sizeMB: 23
141
+ url: hfModelUrl(HF_REPO, "segmentation/yolov8-seg/openvino/camstack-yolov8s-seg.xml"),
142
+ sizeMB: 23,
143
+ runtimes: ["python"]
370
144
  }
371
145
  }
372
146
  },
@@ -375,26 +149,30 @@ var SEGMENTATION_MODELS = [
375
149
  name: "YOLOv8 Medium Segmentation",
376
150
  description: "YOLOv8 Medium \u2014 higher accuracy instance segmentation",
377
151
  inputSize: { width: 640, height: 640 },
378
- labels: COCO_80_LABELS2,
152
+ labels: COCO_80_LABELS,
379
153
  formats: {
380
154
  onnx: {
381
- url: hfModelUrl2(HF_REPO2, "segmentation/yolov8-seg/onnx/camstack-yolov8m-seg.onnx"),
155
+ url: hfModelUrl(HF_REPO, "segmentation/yolov8-seg/onnx/camstack-yolov8m-seg.onnx"),
382
156
  sizeMB: 104
383
157
  },
384
158
  coreml: {
385
- url: hfModelUrl2(HF_REPO2, "segmentation/yolov8-seg/coreml/camstack-yolov8m-seg.mlpackage"),
386
- sizeMB: 52
159
+ url: hfModelUrl(HF_REPO, "segmentation/yolov8-seg/coreml/camstack-yolov8m-seg.mlpackage"),
160
+ sizeMB: 52,
161
+ isDirectory: true,
162
+ files: MLPACKAGE_FILES,
163
+ runtimes: ["python"]
387
164
  },
388
165
  openvino: {
389
- url: hfModelUrl2(HF_REPO2, "segmentation/yolov8-seg/openvino/camstack-yolov8m-seg.xml"),
390
- sizeMB: 53
166
+ url: hfModelUrl(HF_REPO, "segmentation/yolov8-seg/openvino/camstack-yolov8m-seg.xml"),
167
+ sizeMB: 53,
168
+ runtimes: ["python"]
391
169
  }
392
170
  }
393
171
  }
394
172
  ];
395
173
 
396
174
  // src/addons/object-detection/index.ts
397
- import { COCO_TO_MACRO, MACRO_LABELS, COCO_80_LABELS as COCO_80_LABELS3 } from "@camstack/types";
175
+ import { COCO_TO_MACRO, MACRO_LABELS, COCO_80_LABELS as COCO_80_LABELS2 } from "@camstack/types";
398
176
 
399
177
  // src/shared/postprocess/yolo-seg.ts
400
178
  function sigmoid(x) {
@@ -527,6 +305,50 @@ function applyClassMap(detections, classMap) {
527
305
  class: classMap.mapping[d.class]
528
306
  }));
529
307
  }
308
+ var RAM_ESTIMATES = {
309
+ "yolov8n": 80,
310
+ "yolov8s": 150,
311
+ "yolov8s-relu": 150,
312
+ "yolov8m": 300,
313
+ "yolov8l": 500,
314
+ "yolov8x": 800,
315
+ "yolov9t": 60,
316
+ "yolov9s": 120,
317
+ "yolov9c": 300,
318
+ "yolo11n": 70,
319
+ "yolo11s": 130,
320
+ "yolo11m": 280,
321
+ "yolo11l": 450,
322
+ "yolo11x": 750,
323
+ "yolo11n-seg": 84,
324
+ "yolo11s-seg": 156,
325
+ "yolo11m-seg": 336,
326
+ "yolov8n-seg": 96,
327
+ "yolov8s-seg": 180,
328
+ "yolov8m-seg": 360
329
+ };
330
+ var ACCURACY_SCORES = {
331
+ "yolov8n": 55,
332
+ "yolov8s": 70,
333
+ "yolov8s-relu": 68,
334
+ "yolov8m": 82,
335
+ "yolov8l": 88,
336
+ "yolov8x": 92,
337
+ "yolov9t": 58,
338
+ "yolov9s": 73,
339
+ "yolov9c": 86,
340
+ "yolo11n": 62,
341
+ "yolo11s": 78,
342
+ "yolo11m": 88,
343
+ "yolo11l": 93,
344
+ "yolo11x": 97,
345
+ "yolo11n-seg": 62,
346
+ "yolo11s-seg": 78,
347
+ "yolo11m-seg": 88,
348
+ "yolov8n-seg": 55,
349
+ "yolov8s-seg": 70,
350
+ "yolov8m-seg": 82
351
+ };
530
352
  var ObjectDetectionAddon = class {
531
353
  id = "object-detection";
532
354
  slot = "detector";
@@ -538,31 +360,43 @@ var ObjectDetectionAddon = class {
538
360
  name: "Object Detection",
539
361
  version: "0.1.0",
540
362
  description: "YOLO-based object detection \u2014 detects persons, vehicles, and animals",
541
- packageName: "@camstack/addon-vision",
542
363
  slot: "detector",
543
364
  inputClasses: void 0,
544
365
  outputClasses: ["person", "vehicle", "animal"],
545
366
  supportsCustomModels: true,
546
367
  mayRequirePython: false,
547
368
  defaultConfig: {
548
- modelId: "yolov8n",
549
- runtime: "auto",
369
+ modelId: "yolo11n",
370
+ runtime: "node",
550
371
  backend: "cpu",
551
372
  confidence: 0.5,
552
373
  iouThreshold: 0.45,
553
374
  classMapMode: "macro"
554
375
  }
555
376
  };
556
- engine;
377
+ engine = null;
557
378
  modelEntry;
558
379
  confidence = 0.5;
559
380
  iouThreshold = 0.45;
560
381
  classMapMode = "macro";
382
+ resolvedConfig = null;
383
+ ctx = null;
384
+ getModelRequirements() {
385
+ return ALL_DETECTION_MODELS.map((m) => ({
386
+ modelId: m.id,
387
+ name: m.name,
388
+ minRAM_MB: RAM_ESTIMATES[m.id] ?? 100,
389
+ accuracyScore: ACCURACY_SCORES[m.id] ?? 60,
390
+ formats: Object.keys(m.formats)
391
+ }));
392
+ }
393
+ configure(config) {
394
+ this.resolvedConfig = config;
395
+ }
561
396
  async initialize(ctx) {
397
+ this.ctx = ctx;
562
398
  const cfg = ctx.addonConfig;
563
- const modelId = cfg["modelId"] ?? "yolov8n";
564
- const runtime = cfg["runtime"] ?? "auto";
565
- const backend = cfg["backend"] ?? "cpu";
399
+ const modelId = cfg["modelId"] ?? this.resolvedConfig?.modelId ?? "yolo11n";
566
400
  this.confidence = cfg["confidence"] ?? 0.5;
567
401
  this.iouThreshold = cfg["iouThreshold"] ?? 0.45;
568
402
  this.classMapMode = cfg["classMapMode"] ?? "macro";
@@ -571,16 +405,30 @@ var ObjectDetectionAddon = class {
571
405
  throw new Error(`ObjectDetectionAddon: unknown modelId "${modelId}"`);
572
406
  }
573
407
  this.modelEntry = entry;
574
- const resolved = await resolveEngine({
575
- runtime,
576
- backend,
577
- modelEntry: entry,
578
- modelsDir: ctx.locationPaths.models
579
- });
580
- this.engine = resolved.engine;
581
408
  }
582
409
  async detect(frame) {
410
+ if (!this.engine) await this.ensureEngine();
583
411
  const start = Date.now();
412
+ if ("runJpeg" in this.engine && typeof this.engine.runJpeg === "function") {
413
+ const result = await this.engine.runJpeg(frame.data);
414
+ const rawDets = result.detections ?? [];
415
+ const detections2 = rawDets.map((d) => ({
416
+ class: this.classMapMode === "all" ? d.className : COCO_TO_MACRO.mapping[d.className] ?? d.className,
417
+ originalClass: d.className,
418
+ score: d.score,
419
+ bbox: {
420
+ x: d.bbox[0] * frame.width,
421
+ y: d.bbox[1] * frame.height,
422
+ w: (d.bbox[2] - d.bbox[0]) * frame.width,
423
+ h: (d.bbox[3] - d.bbox[1]) * frame.height
424
+ }
425
+ })).filter((d) => this.classMapMode === "all" || COCO_TO_MACRO.mapping[d.originalClass] !== void 0);
426
+ return {
427
+ detections: detections2,
428
+ inferenceMs: result.inferenceMs ?? Date.now() - start,
429
+ modelId: this.modelEntry.id
430
+ };
431
+ }
584
432
  const { width: inputW, height: inputH } = this.modelEntry.inputSize;
585
433
  const targetSize = Math.max(inputW, inputH);
586
434
  const lb = await letterbox(frame.data, targetSize);
@@ -635,6 +483,40 @@ var ObjectDetectionAddon = class {
635
483
  modelId: this.modelEntry.id
636
484
  };
637
485
  }
486
+ async ensureEngine() {
487
+ const config = this.resolvedConfig;
488
+ const modelId = config?.modelId ?? this.modelEntry.id;
489
+ const runtime = config?.runtime === "python" ? "coreml" : config?.runtime === "node" ? "onnx" : "auto";
490
+ const backend = config?.backend ?? "cpu";
491
+ const format = config?.format ?? "onnx";
492
+ const entry = ALL_DETECTION_MODELS.find((m) => m.id === modelId) ?? this.modelEntry;
493
+ this.modelEntry = entry;
494
+ const modelsDir = this.ctx.models?.getModelsDir() ?? this.ctx.locationPaths.models;
495
+ if (this.ctx.models) {
496
+ await this.ctx.models.ensure(modelId, format);
497
+ }
498
+ let pythonPath;
499
+ if (config?.runtime === "python") {
500
+ for (const cmd of ["python3", "python"]) {
501
+ try {
502
+ const { execSync } = await import("child_process");
503
+ execSync(`${cmd} --version`, { timeout: 3e3, stdio: "ignore" });
504
+ pythonPath = cmd;
505
+ break;
506
+ } catch {
507
+ }
508
+ }
509
+ }
510
+ const resolved = await resolveEngine({
511
+ runtime,
512
+ backend,
513
+ modelEntry: entry,
514
+ modelsDir,
515
+ pythonPath,
516
+ models: this.ctx.models
517
+ });
518
+ this.engine = resolved.engine;
519
+ }
638
520
  async shutdown() {
639
521
  await this.engine?.dispose();
640
522
  }
@@ -644,7 +526,7 @@ var ObjectDetectionAddon = class {
644
526
  {
645
527
  id: "model",
646
528
  title: "Model",
647
- columns: 2,
529
+ columns: 1,
648
530
  fields: [
649
531
  {
650
532
  key: "modelId",
@@ -669,7 +551,7 @@ var ObjectDetectionAddon = class {
669
551
  label: "Runtime",
670
552
  type: "select",
671
553
  options: [
672
- { value: "auto", label: "Auto (recommended)" },
554
+ { value: "auto", label: "Auto" },
673
555
  { value: "onnx", label: "ONNX Runtime" },
674
556
  { value: "coreml", label: "CoreML (Apple)" },
675
557
  { value: "openvino", label: "OpenVINO (Intel)" }
@@ -679,8 +561,9 @@ var ObjectDetectionAddon = class {
679
561
  key: "backend",
680
562
  label: "Backend",
681
563
  type: "select",
682
- dependsOn: { runtime: "onnx" },
564
+ showWhen: { field: "runtime", equals: "onnx" },
683
565
  options: [
566
+ { value: "auto", label: "Auto" },
684
567
  { value: "cpu", label: "CPU" },
685
568
  { value: "coreml", label: "CoreML" },
686
569
  { value: "cuda", label: "CUDA (NVIDIA)" },
@@ -743,7 +626,7 @@ var ObjectDetectionAddon = class {
743
626
  return [];
744
627
  }
745
628
  getActiveLabels() {
746
- return this.classMapMode === "all" ? COCO_80_LABELS3 : MACRO_LABELS;
629
+ return this.classMapMode === "all" ? COCO_80_LABELS2 : MACRO_LABELS;
747
630
  }
748
631
  async probe() {
749
632
  return {
@@ -756,8 +639,7 @@ var ObjectDetectionAddon = class {
756
639
  };
757
640
 
758
641
  export {
759
- OBJECT_DETECTION_MODELS,
760
642
  SEGMENTATION_MODELS,
761
643
  ObjectDetectionAddon
762
644
  };
763
- //# sourceMappingURL=chunk-AYBFB7ID.mjs.map
645
+ //# sourceMappingURL=chunk-G32RCIUI.mjs.map