@camstack/addon-pipeline 1.2.103 → 1.2.104

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 (52) hide show
  1. package/dist/{addon-utils-CLc6yHCN.js → addon-utils-DRbRzrDy.js} +1 -1
  2. package/dist/audio-analyzer/index.js +3 -3
  3. package/dist/audio-analyzer/index.mjs +2 -2
  4. package/dist/detection-pipeline/index.js +844 -110
  5. package/dist/detection-pipeline/index.mjs +842 -108
  6. package/dist/{dist-Ccmt3fGJ.mjs → dist-D9sltFoR.mjs} +230 -6
  7. package/dist/{dist-C11WuNUP.js → dist-gLAVhbvO.js} +247 -5
  8. package/dist/{event-loop-stall-monitor-OJrOMeuu.mjs → event-loop-stall-monitor-BS_lPX6H.mjs} +82 -88
  9. package/dist/{event-loop-stall-monitor-Cq_NeC4o.js → event-loop-stall-monitor-BUhYY39J.js} +82 -88
  10. package/dist/{lazy-sharp-RxUs6on_.js → lazy-sharp-OiAUva0g.js} +1 -1
  11. package/dist/motion-wasm/index.js +2 -2
  12. package/dist/motion-wasm/index.mjs +1 -1
  13. package/dist/pipeline-runner/index.js +8 -6
  14. package/dist/pipeline-runner/index.mjs +6 -4
  15. package/dist/{process-memory-DOjQ3MgC.js → process-memory-DY4RHcTj.js} +1 -1
  16. package/dist/{process-memory-D0zDmXLI.mjs → process-memory-Dw7-9jCI.mjs} +1 -1
  17. package/dist/recorder/index.js +660 -130
  18. package/dist/recorder/index.mjs +659 -129
  19. package/dist/remote-restream-BeHi78PZ.mjs +25 -0
  20. package/dist/remote-restream-CO36Sr30.js +36 -0
  21. package/dist/restream-intent-B4BXZra7.mjs +72 -0
  22. package/dist/{remote-restream-BYbAsgUf.js → restream-intent-Cv9x3jmu.js} +30 -30
  23. package/dist/session-decode/decode-worker-child.js +2 -2
  24. package/dist/session-decode/decode-worker-child.mjs +1 -1
  25. package/dist/stream-broker/_stub.js +1 -1
  26. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BdgcF1lL.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-ZaqZ17-x.mjs} +3 -3
  27. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BnhMnnKV.mjs +26 -0
  28. package/dist/stream-broker/{hostInit-Da9wVA2r.mjs → hostInit-aZY81RnZ.mjs} +3 -3
  29. package/dist/stream-broker/index.js +598 -82
  30. package/dist/stream-broker/index.mjs +597 -81
  31. package/dist/stream-broker/remoteEntry.js +1 -1
  32. package/dist/{worker-protocol-DDpliBIW.mjs → worker-protocol-Bz7-sMZC.mjs} +1 -1
  33. package/dist/{worker-protocol-BePduZVV.js → worker-protocol-D_0q_4Le.js} +1 -1
  34. package/package.json +1 -1
  35. package/python/inference_pool.py +193 -1
  36. package/python/postprocessors/__init__.py +4 -0
  37. package/python/postprocessors/ctc.py +52 -0
  38. package/python/postprocessors/plate_slots.py +180 -0
  39. package/python/postprocessors/test_ctc.py +39 -0
  40. package/python/postprocessors/test_plate_slots.py +217 -0
  41. package/python/postprocessors/test_yolonas.py +83 -0
  42. package/python/postprocessors/yolonas.py +67 -0
  43. package/python/test_inference_pool_backpressure.py +6 -2
  44. package/python/test_inference_pool_coreml_cache.py +12 -4
  45. package/python/test_inference_pool_device_selection.py +12 -4
  46. package/python/test_inference_pool_layout.py +16 -5
  47. package/python/test_inference_pool_memstats.py +6 -2
  48. package/python/test_inference_pool_ov_ppp.py +12 -9
  49. package/python/test_inference_pool_preprocess.py +57 -0
  50. package/python/test_inference_pool_static_batch.py +426 -0
  51. package/dist/remote-restream-Ci7RXNGb.mjs +0 -66
  52. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DY31bUCj.mjs +0 -26
@@ -1,4 +1,4 @@
1
- import { W as hfModelUrl, a as COCO_80_LABELS, k as audioKindId, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS } from "./dist-Ccmt3fGJ.mjs";
1
+ import { A as audioKindId, G as hfModelUrl, a as COCO_80_LABELS, o as COCO_TO_MACRO, r as AUDIO_MACRO_LABELS } from "./dist-D9sltFoR.mjs";
2
2
  import { PerformanceObserver } from "node:perf_hooks";
3
3
  //#region src/detection-pipeline/registry/model-catalogs.ts
4
4
  var HF_REPO = "camstack/camstack-models";
@@ -737,9 +737,39 @@ var PACKAGE_DETECTION_MODELS = [{
737
737
  }
738
738
  }];
739
739
  var PLATE_OCR_MODELS = [{
740
+ id: "cct-s-v2-global",
741
+ name: "CCT-S v2 Global — License Plate",
742
+ 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",
743
+ inputSize: {
744
+ width: 128,
745
+ height: 64
746
+ },
747
+ inputLayout: "nhwc",
748
+ labels: [{
749
+ id: "text",
750
+ name: "Plate Text"
751
+ }],
752
+ preprocessMode: "resize",
753
+ postprocessor: "plate-slots",
754
+ license: "MIT",
755
+ formats: {
756
+ onnx: {
757
+ url: hf("plateRecognition/cct-s-v2-global/onnx/camstack-cct-s-v2-global.onnx"),
758
+ sizeMB: 5.3
759
+ },
760
+ coreml: {
761
+ url: hf("plateRecognition/cct-s-v2-global/coreml/camstack-cct-s-v2-global.mlpackage"),
762
+ sizeMB: 5.1,
763
+ isDirectory: true,
764
+ files: [...MLPACKAGE_FILES],
765
+ runtimes: ["python"]
766
+ },
767
+ openvino: ovFormat(hf("plateRecognition/cct-s-v2-global/openvino/camstack-cct-s-v2-global.xml"), 5)
768
+ }
769
+ }, {
740
770
  id: "vgg-english-g2",
741
771
  name: "VGG English G2",
742
- description: "EasyOCR VGG English G2 — text recognition for license plates and scene text",
772
+ description: "EasyOCR VGG English G2 — generic English text recognition. Superseded as the plate-OCR default by cct-s-v2-global (4/21 vs 19/21 exact on the cam-617 set); kept selectable for non-plate scene text and for any node pinned to it",
743
773
  inputSize: {
744
774
  width: 384,
745
775
  height: 64
@@ -1107,95 +1137,55 @@ var INSTANCE_SEGMENTATION_MODELS = [
1107
1137
  }
1108
1138
  }
1109
1139
  ];
1110
- var CLIP_EMBEDDING_MODELS = [
1111
- {
1112
- id: "mobileclip-s0",
1113
- name: "MobileCLIP S0",
1114
- description: "MobileCLIP S0 — Apple ultra-fast CLIP vision encoder, 512-dim, 256×256 (40 MB ONNX)",
1115
- inputSize: {
1116
- width: 256,
1117
- height: 256
1118
- },
1119
- labels: [{
1120
- id: "embedding",
1121
- name: "CLIP Embedding"
1122
- }],
1123
- preprocessMode: "resize",
1124
- inputNormalization: "none",
1125
- formats: {
1126
- onnx: {
1127
- url: hf("clip/mobileclip-s0/onnx/camstack-mobileclip-s0-vision.onnx"),
1128
- sizeMB: 40
1129
- },
1130
- openvino: ovFormat(hf("clip/mobileclip-s0/openvino/camstack-mobileclip-s0-vision.xml"), 25),
1131
- coreml: {
1132
- url: hf("clip/mobileclip-s0/coreml/camstack-mobileclip-s0-vision.mlpackage"),
1133
- sizeMB: 30,
1134
- isDirectory: true,
1135
- files: [...MLPACKAGE_FILES],
1136
- runtimes: ["python"]
1137
- }
1138
- }
1140
+ var CLIP_EMBEDDING_MODELS = [{
1141
+ id: "mobileclip-s1",
1142
+ name: "MobileCLIP S1",
1143
+ description: "MobileCLIP S1 — Apple balanced CLIP vision encoder, 512-dim, 256×256 (fp16 OpenVINO/CoreML)",
1144
+ inputSize: {
1145
+ width: 256,
1146
+ height: 256
1139
1147
  },
1140
- {
1141
- id: "mobileclip-s1",
1142
- name: "MobileCLIP S1",
1143
- description: "MobileCLIP S1 — Apple balanced CLIP vision encoder, 512-dim, 256×256 (90 MB ONNX)",
1144
- inputSize: {
1145
- width: 256,
1146
- height: 256
1147
- },
1148
- labels: [{
1149
- id: "embedding",
1150
- name: "CLIP Embedding"
1151
- }],
1152
- preprocessMode: "resize",
1153
- inputNormalization: "none",
1154
- formats: {
1155
- onnx: {
1156
- url: hf("clip/mobileclip-s1/onnx/camstack-mobileclip-s1-vision.onnx"),
1157
- sizeMB: 90
1158
- },
1159
- openvino: ovFormat(hf("clip/mobileclip-s1/openvino/camstack-mobileclip-s1-vision.xml"), 55),
1160
- coreml: {
1161
- url: hf("clip/mobileclip-s1/coreml/camstack-mobileclip-s1-vision.mlpackage"),
1162
- sizeMB: 65,
1163
- isDirectory: true,
1164
- files: [...MLPACKAGE_FILES],
1165
- runtimes: ["python"]
1166
- }
1148
+ labels: [{
1149
+ id: "embedding",
1150
+ name: "CLIP Embedding"
1151
+ }],
1152
+ preprocessMode: "resize",
1153
+ inputNormalization: "none",
1154
+ formats: {
1155
+ openvino: ovFormat(hf("clip/mobileclip-s1/openvino/camstack-mobileclip-s1-vision.xml"), 55),
1156
+ coreml: {
1157
+ url: hf("clip/mobileclip-s1/coreml/camstack-mobileclip-s1-vision.mlpackage"),
1158
+ sizeMB: 65,
1159
+ isDirectory: true,
1160
+ files: [...MLPACKAGE_FILES],
1161
+ runtimes: ["python"]
1167
1162
  }
1163
+ }
1164
+ }, {
1165
+ id: "mobileclip-s2",
1166
+ name: "MobileCLIP S2",
1167
+ description: "MobileCLIP S2 — Apple high-accuracy CLIP vision encoder, 512-dim, 256×256 (fp16 OpenVINO/CoreML)",
1168
+ inputSize: {
1169
+ width: 256,
1170
+ height: 256
1168
1171
  },
1169
- {
1170
- id: "mobileclip-s2",
1171
- name: "MobileCLIP S2",
1172
- description: "MobileCLIP S2 — Apple high-accuracy CLIP vision encoder, 512-dim, 256×256 (150 MB ONNX)",
1173
- inputSize: {
1174
- width: 256,
1175
- height: 256
1176
- },
1177
- labels: [{
1178
- id: "embedding",
1179
- name: "CLIP Embedding"
1180
- }],
1181
- preprocessMode: "resize",
1182
- inputNormalization: "none",
1183
- formats: {
1184
- onnx: {
1185
- url: hf("clip/mobileclip-s2/onnx/camstack-mobileclip-s2-vision.onnx"),
1186
- sizeMB: 150
1187
- },
1188
- openvino: ovFormat(hf("clip/mobileclip-s2/openvino/camstack-mobileclip-s2-vision.xml"), 90),
1189
- coreml: {
1190
- url: hf("clip/mobileclip-s2/coreml/camstack-mobileclip-s2-vision.mlpackage"),
1191
- sizeMB: 110,
1192
- isDirectory: true,
1193
- files: [...MLPACKAGE_FILES],
1194
- runtimes: ["python"]
1195
- }
1172
+ labels: [{
1173
+ id: "embedding",
1174
+ name: "CLIP Embedding"
1175
+ }],
1176
+ preprocessMode: "resize",
1177
+ inputNormalization: "none",
1178
+ formats: {
1179
+ openvino: ovFormat(hf("clip/mobileclip-s2/openvino/camstack-mobileclip-s2-vision.xml"), 90),
1180
+ coreml: {
1181
+ url: hf("clip/mobileclip-s2/coreml/camstack-mobileclip-s2-vision.mlpackage"),
1182
+ sizeMB: 110,
1183
+ isDirectory: true,
1184
+ files: [...MLPACKAGE_FILES],
1185
+ runtimes: ["python"]
1196
1186
  }
1197
1187
  }
1198
- ];
1188
+ }];
1199
1189
  var AUDIO_CLASSIFIER_MODELS = [{
1200
1190
  id: "yamnet-onnx",
1201
1191
  name: "YAMNet",
@@ -1533,7 +1523,7 @@ var PackageDetectionStep = class extends PipelineStepBase {
1533
1523
  type: "slider",
1534
1524
  key: "minConfidencePackage",
1535
1525
  label: "Min Confidence — Package",
1536
- description: "Drop package predictions below this score. Raise it when static porch furniture (a doormat, a plant pot) is reported as a parcel those sit just above the default.",
1526
+ description: "Drop package predictions below this score. NOTE: raising it does NOT fix a recurring static false positive measured on device 615, the false object (a streetlight light patch) scored up to 0.877 while the one real parcel scored 0.885, so no threshold separates them. The lever that does is the package SIZE ceiling in the camera’s Package detection settings (the false object covers 8–9.5% of the frame, real parcels 1–2%).",
1537
1527
  min: 0,
1538
1528
  max: 1,
1539
1529
  step: .05,
@@ -1560,6 +1550,7 @@ var ClassifierWithMinConfidence = class extends PipelineStepBase {
1560
1550
  var PLATE_OCR_DEFAULT_REGION = "DE";
1561
1551
  var PLATE_OCR_DEFAULT_MIN_TEXT_LENGTH = 3;
1562
1552
  var PLATE_OCR_DEFAULT_MIN_TEXT_CONFIDENCE = 0;
1553
+ var PLATE_OCR_DEFAULT_MIN_CHAR_PROBABILITY = .75;
1563
1554
  /**
1564
1555
  * Plate OCR step — exposes a `rectify` toggle (default ON) that deskews the
1565
1556
  * plate crop (rotation rectification) before the CTC recognizer reads it.
@@ -1647,6 +1638,7 @@ var STEP_FACE_EMBEDDING = new FaceEmbeddingStep({
1647
1638
  labelTier: 2,
1648
1639
  models: [...FACE_EMBEDDING_MODELS],
1649
1640
  defaultModelId: "arcface-r100",
1641
+ modelScope: "cluster",
1650
1642
  defaultConfidence: 0,
1651
1643
  cadence: {
1652
1644
  trigger: "improve",
@@ -1668,6 +1660,7 @@ var STEP_CLIP_EMBEDDING = new PipelineStepBase({
1668
1660
  outputClasses: ["embedding"],
1669
1661
  models: [...CLIP_EMBEDDING_MODELS],
1670
1662
  defaultModelId: "mobileclip-s1",
1663
+ modelScope: "cluster",
1671
1664
  enabledByDefault: true,
1672
1665
  backfillIntoExistingOverrides: true,
1673
1666
  defaultConfidence: 0,
@@ -1703,12 +1696,13 @@ var STEP_PLATE_OCR = new PlateOcrStep({
1703
1696
  outputClasses: ["plate-text"],
1704
1697
  labelTier: 2,
1705
1698
  models: [...PLATE_OCR_MODELS],
1706
- defaultModelId: "vgg-english-g2",
1699
+ defaultModelId: "cct-s-v2-global",
1707
1700
  defaultConfidence: 0,
1708
1701
  charset: [...VGG_G2_CHARSET],
1709
1702
  plateRegion: PLATE_OCR_DEFAULT_REGION,
1710
1703
  minTextLength: PLATE_OCR_DEFAULT_MIN_TEXT_LENGTH,
1711
1704
  minTextConfidence: PLATE_OCR_DEFAULT_MIN_TEXT_CONFIDENCE,
1705
+ minCharProbability: PLATE_OCR_DEFAULT_MIN_CHAR_PROBABILITY,
1712
1706
  cadence: {
1713
1707
  trigger: "once",
1714
1708
  maxPerTrack: 5
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-C11WuNUP.js");
1
+ const require_dist = require("./dist-gLAVhbvO.js");
2
2
  let node_perf_hooks = require("node:perf_hooks");
3
3
  //#region src/detection-pipeline/registry/model-catalogs.ts
4
4
  var HF_REPO = "camstack/camstack-models";
@@ -737,9 +737,39 @@ var PACKAGE_DETECTION_MODELS = [{
737
737
  }
738
738
  }];
739
739
  var PLATE_OCR_MODELS = [{
740
+ id: "cct-s-v2-global",
741
+ name: "CCT-S v2 Global — License Plate",
742
+ 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",
743
+ inputSize: {
744
+ width: 128,
745
+ height: 64
746
+ },
747
+ inputLayout: "nhwc",
748
+ labels: [{
749
+ id: "text",
750
+ name: "Plate Text"
751
+ }],
752
+ preprocessMode: "resize",
753
+ postprocessor: "plate-slots",
754
+ license: "MIT",
755
+ formats: {
756
+ onnx: {
757
+ url: hf("plateRecognition/cct-s-v2-global/onnx/camstack-cct-s-v2-global.onnx"),
758
+ sizeMB: 5.3
759
+ },
760
+ coreml: {
761
+ url: hf("plateRecognition/cct-s-v2-global/coreml/camstack-cct-s-v2-global.mlpackage"),
762
+ sizeMB: 5.1,
763
+ isDirectory: true,
764
+ files: [...MLPACKAGE_FILES],
765
+ runtimes: ["python"]
766
+ },
767
+ openvino: ovFormat(hf("plateRecognition/cct-s-v2-global/openvino/camstack-cct-s-v2-global.xml"), 5)
768
+ }
769
+ }, {
740
770
  id: "vgg-english-g2",
741
771
  name: "VGG English G2",
742
- description: "EasyOCR VGG English G2 — text recognition for license plates and scene text",
772
+ description: "EasyOCR VGG English G2 — generic English text recognition. Superseded as the plate-OCR default by cct-s-v2-global (4/21 vs 19/21 exact on the cam-617 set); kept selectable for non-plate scene text and for any node pinned to it",
743
773
  inputSize: {
744
774
  width: 384,
745
775
  height: 64
@@ -1107,95 +1137,55 @@ var INSTANCE_SEGMENTATION_MODELS = [
1107
1137
  }
1108
1138
  }
1109
1139
  ];
1110
- var CLIP_EMBEDDING_MODELS = [
1111
- {
1112
- id: "mobileclip-s0",
1113
- name: "MobileCLIP S0",
1114
- description: "MobileCLIP S0 — Apple ultra-fast CLIP vision encoder, 512-dim, 256×256 (40 MB ONNX)",
1115
- inputSize: {
1116
- width: 256,
1117
- height: 256
1118
- },
1119
- labels: [{
1120
- id: "embedding",
1121
- name: "CLIP Embedding"
1122
- }],
1123
- preprocessMode: "resize",
1124
- inputNormalization: "none",
1125
- formats: {
1126
- onnx: {
1127
- url: hf("clip/mobileclip-s0/onnx/camstack-mobileclip-s0-vision.onnx"),
1128
- sizeMB: 40
1129
- },
1130
- openvino: ovFormat(hf("clip/mobileclip-s0/openvino/camstack-mobileclip-s0-vision.xml"), 25),
1131
- coreml: {
1132
- url: hf("clip/mobileclip-s0/coreml/camstack-mobileclip-s0-vision.mlpackage"),
1133
- sizeMB: 30,
1134
- isDirectory: true,
1135
- files: [...MLPACKAGE_FILES],
1136
- runtimes: ["python"]
1137
- }
1138
- }
1140
+ var CLIP_EMBEDDING_MODELS = [{
1141
+ id: "mobileclip-s1",
1142
+ name: "MobileCLIP S1",
1143
+ description: "MobileCLIP S1 — Apple balanced CLIP vision encoder, 512-dim, 256×256 (fp16 OpenVINO/CoreML)",
1144
+ inputSize: {
1145
+ width: 256,
1146
+ height: 256
1139
1147
  },
1140
- {
1141
- id: "mobileclip-s1",
1142
- name: "MobileCLIP S1",
1143
- description: "MobileCLIP S1 — Apple balanced CLIP vision encoder, 512-dim, 256×256 (90 MB ONNX)",
1144
- inputSize: {
1145
- width: 256,
1146
- height: 256
1147
- },
1148
- labels: [{
1149
- id: "embedding",
1150
- name: "CLIP Embedding"
1151
- }],
1152
- preprocessMode: "resize",
1153
- inputNormalization: "none",
1154
- formats: {
1155
- onnx: {
1156
- url: hf("clip/mobileclip-s1/onnx/camstack-mobileclip-s1-vision.onnx"),
1157
- sizeMB: 90
1158
- },
1159
- openvino: ovFormat(hf("clip/mobileclip-s1/openvino/camstack-mobileclip-s1-vision.xml"), 55),
1160
- coreml: {
1161
- url: hf("clip/mobileclip-s1/coreml/camstack-mobileclip-s1-vision.mlpackage"),
1162
- sizeMB: 65,
1163
- isDirectory: true,
1164
- files: [...MLPACKAGE_FILES],
1165
- runtimes: ["python"]
1166
- }
1148
+ labels: [{
1149
+ id: "embedding",
1150
+ name: "CLIP Embedding"
1151
+ }],
1152
+ preprocessMode: "resize",
1153
+ inputNormalization: "none",
1154
+ formats: {
1155
+ openvino: ovFormat(hf("clip/mobileclip-s1/openvino/camstack-mobileclip-s1-vision.xml"), 55),
1156
+ coreml: {
1157
+ url: hf("clip/mobileclip-s1/coreml/camstack-mobileclip-s1-vision.mlpackage"),
1158
+ sizeMB: 65,
1159
+ isDirectory: true,
1160
+ files: [...MLPACKAGE_FILES],
1161
+ runtimes: ["python"]
1167
1162
  }
1163
+ }
1164
+ }, {
1165
+ id: "mobileclip-s2",
1166
+ name: "MobileCLIP S2",
1167
+ description: "MobileCLIP S2 — Apple high-accuracy CLIP vision encoder, 512-dim, 256×256 (fp16 OpenVINO/CoreML)",
1168
+ inputSize: {
1169
+ width: 256,
1170
+ height: 256
1168
1171
  },
1169
- {
1170
- id: "mobileclip-s2",
1171
- name: "MobileCLIP S2",
1172
- description: "MobileCLIP S2 — Apple high-accuracy CLIP vision encoder, 512-dim, 256×256 (150 MB ONNX)",
1173
- inputSize: {
1174
- width: 256,
1175
- height: 256
1176
- },
1177
- labels: [{
1178
- id: "embedding",
1179
- name: "CLIP Embedding"
1180
- }],
1181
- preprocessMode: "resize",
1182
- inputNormalization: "none",
1183
- formats: {
1184
- onnx: {
1185
- url: hf("clip/mobileclip-s2/onnx/camstack-mobileclip-s2-vision.onnx"),
1186
- sizeMB: 150
1187
- },
1188
- openvino: ovFormat(hf("clip/mobileclip-s2/openvino/camstack-mobileclip-s2-vision.xml"), 90),
1189
- coreml: {
1190
- url: hf("clip/mobileclip-s2/coreml/camstack-mobileclip-s2-vision.mlpackage"),
1191
- sizeMB: 110,
1192
- isDirectory: true,
1193
- files: [...MLPACKAGE_FILES],
1194
- runtimes: ["python"]
1195
- }
1172
+ labels: [{
1173
+ id: "embedding",
1174
+ name: "CLIP Embedding"
1175
+ }],
1176
+ preprocessMode: "resize",
1177
+ inputNormalization: "none",
1178
+ formats: {
1179
+ openvino: ovFormat(hf("clip/mobileclip-s2/openvino/camstack-mobileclip-s2-vision.xml"), 90),
1180
+ coreml: {
1181
+ url: hf("clip/mobileclip-s2/coreml/camstack-mobileclip-s2-vision.mlpackage"),
1182
+ sizeMB: 110,
1183
+ isDirectory: true,
1184
+ files: [...MLPACKAGE_FILES],
1185
+ runtimes: ["python"]
1196
1186
  }
1197
1187
  }
1198
- ];
1188
+ }];
1199
1189
  var AUDIO_CLASSIFIER_MODELS = [{
1200
1190
  id: "yamnet-onnx",
1201
1191
  name: "YAMNet",
@@ -1533,7 +1523,7 @@ var PackageDetectionStep = class extends PipelineStepBase {
1533
1523
  type: "slider",
1534
1524
  key: "minConfidencePackage",
1535
1525
  label: "Min Confidence — Package",
1536
- description: "Drop package predictions below this score. Raise it when static porch furniture (a doormat, a plant pot) is reported as a parcel those sit just above the default.",
1526
+ description: "Drop package predictions below this score. NOTE: raising it does NOT fix a recurring static false positive measured on device 615, the false object (a streetlight light patch) scored up to 0.877 while the one real parcel scored 0.885, so no threshold separates them. The lever that does is the package SIZE ceiling in the camera’s Package detection settings (the false object covers 8–9.5% of the frame, real parcels 1–2%).",
1537
1527
  min: 0,
1538
1528
  max: 1,
1539
1529
  step: .05,
@@ -1560,6 +1550,7 @@ var ClassifierWithMinConfidence = class extends PipelineStepBase {
1560
1550
  var PLATE_OCR_DEFAULT_REGION = "DE";
1561
1551
  var PLATE_OCR_DEFAULT_MIN_TEXT_LENGTH = 3;
1562
1552
  var PLATE_OCR_DEFAULT_MIN_TEXT_CONFIDENCE = 0;
1553
+ var PLATE_OCR_DEFAULT_MIN_CHAR_PROBABILITY = .75;
1563
1554
  /**
1564
1555
  * Plate OCR step — exposes a `rectify` toggle (default ON) that deskews the
1565
1556
  * plate crop (rotation rectification) before the CTC recognizer reads it.
@@ -1647,6 +1638,7 @@ var STEP_FACE_EMBEDDING = new FaceEmbeddingStep({
1647
1638
  labelTier: 2,
1648
1639
  models: [...FACE_EMBEDDING_MODELS],
1649
1640
  defaultModelId: "arcface-r100",
1641
+ modelScope: "cluster",
1650
1642
  defaultConfidence: 0,
1651
1643
  cadence: {
1652
1644
  trigger: "improve",
@@ -1668,6 +1660,7 @@ var STEP_CLIP_EMBEDDING = new PipelineStepBase({
1668
1660
  outputClasses: ["embedding"],
1669
1661
  models: [...CLIP_EMBEDDING_MODELS],
1670
1662
  defaultModelId: "mobileclip-s1",
1663
+ modelScope: "cluster",
1671
1664
  enabledByDefault: true,
1672
1665
  backfillIntoExistingOverrides: true,
1673
1666
  defaultConfidence: 0,
@@ -1703,12 +1696,13 @@ var STEP_PLATE_OCR = new PlateOcrStep({
1703
1696
  outputClasses: ["plate-text"],
1704
1697
  labelTier: 2,
1705
1698
  models: [...PLATE_OCR_MODELS],
1706
- defaultModelId: "vgg-english-g2",
1699
+ defaultModelId: "cct-s-v2-global",
1707
1700
  defaultConfidence: 0,
1708
1701
  charset: [...VGG_G2_CHARSET],
1709
1702
  plateRegion: PLATE_OCR_DEFAULT_REGION,
1710
1703
  minTextLength: PLATE_OCR_DEFAULT_MIN_TEXT_LENGTH,
1711
1704
  minTextConfidence: PLATE_OCR_DEFAULT_MIN_TEXT_CONFIDENCE,
1705
+ minCharProbability: PLATE_OCR_DEFAULT_MIN_CHAR_PROBABILITY,
1712
1706
  cadence: {
1713
1707
  trigger: "once",
1714
1708
  maxPerTrack: 5
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-C11WuNUP.js");
1
+ const require_dist = require("./dist-gLAVhbvO.js");
2
2
  let node_url = require("node:url");
3
3
  let node_module = require("node:module");
4
4
  let node_path = require("node:path");
@@ -2,8 +2,8 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-C11WuNUP.js");
6
- const require_lazy_sharp = require("../lazy-sharp-RxUs6on_.js");
5
+ const require_dist = require("../dist-gLAVhbvO.js");
6
+ const require_lazy_sharp = require("../lazy-sharp-OiAUva0g.js");
7
7
  let node_path = require("node:path");
8
8
  let node_fs = require("node:fs");
9
9
  //#region src/motion-wasm/wasm-motion-detector.ts
@@ -1,4 +1,4 @@
1
- import { U as evaluateZoneRules, bt as hydrateSchema, ht as BaseAddon, q as motionDetectionCapability, vt as DeviceType } from "../dist-Ccmt3fGJ.mjs";
1
+ import { Ct as hydrateSchema, J as motionDetectionCapability, W as evaluateZoneRules, vt as BaseAddon, xt as DeviceType } from "../dist-D9sltFoR.mjs";
2
2
  import { t as getSharp } from "../lazy-sharp-6oymT_yf.mjs";
3
3
  import { join } from "node:path";
4
4
  import { readFileSync } from "node:fs";
@@ -2,12 +2,13 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-C11WuNUP.js");
6
- const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-Cq_NeC4o.js");
7
- const require_worker_protocol = require("../worker-protocol-BePduZVV.js");
5
+ const require_dist = require("../dist-gLAVhbvO.js");
6
+ const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-BUhYY39J.js");
7
+ const require_worker_protocol = require("../worker-protocol-D_0q_4Le.js");
8
8
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
9
- const require_lazy_sharp = require("../lazy-sharp-RxUs6on_.js");
10
- const require_remote_restream = require("../remote-restream-BYbAsgUf.js");
9
+ const require_lazy_sharp = require("../lazy-sharp-OiAUva0g.js");
10
+ const require_restream_intent = require("../restream-intent-Cv9x3jmu.js");
11
+ const require_remote_restream = require("../remote-restream-CO36Sr30.js");
11
12
  let sharp = require("sharp");
12
13
  sharp = require_dist.__toESM(sharp);
13
14
  let node_child_process = require("node:child_process");
@@ -2092,6 +2093,7 @@ function toDetailResult(detection, stepId, crop) {
2092
2093
  bbox: mapBboxToFrameSpace(detection.bbox, crop),
2093
2094
  ...detection.embedding !== void 0 ? { embedding: encodeEmbeddingBase64(detection.embedding) } : {},
2094
2095
  ...detection.embeddingMagnitude !== void 0 ? { embeddingMagnitude: detection.embeddingMagnitude } : {},
2096
+ ...detection.embedding !== void 0 && detection.embeddingModelId !== void 0 ? { embeddingModelId: detection.embeddingModelId } : {},
2095
2097
  ...label !== void 0 ? {
2096
2098
  label: label.label,
2097
2099
  ...label.tier !== void 0 ? { labelTier: label.tier } : {},
@@ -4415,7 +4417,7 @@ async function acquireSessionDecodeRestreamFrom(api, logger, params) {
4415
4417
  }, pin);
4416
4418
  const codec = rtpSource.videoCodec === "H265" ? "h265" : "h264";
4417
4419
  const source = {
4418
- restreamUrl: detectionIntent ? require_remote_restream.withDetectionIntent(rtpSource.url) : rtpSource.url,
4420
+ restreamUrl: detectionIntent ? require_restream_intent.withDetectionIntent(rtpSource.url) : rtpSource.url,
4419
4421
  deviceId,
4420
4422
  codec
4421
4423
  };
@@ -1,9 +1,10 @@
1
- import { At as array, Bt as EventCategory, F as defineCustomActions, Ft as number, It as object, L as deriveDetailCropRect, N as customAction, Nt as lazy, Pt as literal, Q as pipelineRunnerCapability, Rt as string, X as pickNativeLeaseOverride, Y as pickDetailCropConvention, c as DEFAULT_DETAIL_CROP_CONVENTION, d as DEVICE_BACKEND_TO_FORMAT, ht as BaseAddon, jt as boolean, kt as _enum, lt as errMsg, wt as nodePin, yt as createEvent } from "../dist-Ccmt3fGJ.mjs";
2
- import { c as getStepDefinition, t as attributeStall } from "../event-loop-stall-monitor-OJrOMeuu.mjs";
3
- import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-DDpliBIW.mjs";
1
+ import { Dt as nodePin, I as defineCustomActions, It as lazy, Lt as literal, Mt as _enum, Nt as array, P as customAction, Pt as boolean, Q as pickNativeLeaseOverride, R as deriveDetailCropRect, Rt as number, St as createEvent, Ut as EventCategory, Vt as string, Z as pickDetailCropConvention, et as pipelineRunnerCapability, f as DEVICE_BACKEND_TO_FORMAT, ft as errMsg, l as DEFAULT_DETAIL_CROP_CONVENTION, vt as BaseAddon, zt as object } from "../dist-D9sltFoR.mjs";
2
+ import { c as getStepDefinition, t as attributeStall } from "../event-loop-stall-monitor-BS_lPX6H.mjs";
3
+ import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-Bz7-sMZC.mjs";
4
4
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
5
5
  import { t as getSharp } from "../lazy-sharp-6oymT_yf.mjs";
6
- import { i as withDetectionIntent, n as profileForStreamId, t as isRemoteRestream } from "../remote-restream-Ci7RXNGb.mjs";
6
+ import { n as withDetectionIntent } from "../restream-intent-B4BXZra7.mjs";
7
+ import { n as profileForStreamId, t as isRemoteRestream } from "../remote-restream-BeHi78PZ.mjs";
7
8
  import sharp from "sharp";
8
9
  import { fork } from "node:child_process";
9
10
  import { fileURLToPath } from "node:url";
@@ -2085,6 +2086,7 @@ function toDetailResult(detection, stepId, crop) {
2085
2086
  bbox: mapBboxToFrameSpace(detection.bbox, crop),
2086
2087
  ...detection.embedding !== void 0 ? { embedding: encodeEmbeddingBase64(detection.embedding) } : {},
2087
2088
  ...detection.embeddingMagnitude !== void 0 ? { embeddingMagnitude: detection.embeddingMagnitude } : {},
2089
+ ...detection.embedding !== void 0 && detection.embeddingModelId !== void 0 ? { embeddingModelId: detection.embeddingModelId } : {},
2088
2090
  ...label !== void 0 ? {
2089
2091
  label: label.label,
2090
2092
  ...label.tier !== void 0 ? { labelTier: label.tier } : {},
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-C11WuNUP.js");
1
+ const require_dist = require("./dist-gLAVhbvO.js");
2
2
  let node_child_process = require("node:child_process");
3
3
  let node_fs = require("node:fs");
4
4
  node_fs = require_dist.__toESM(node_fs);
@@ -1,4 +1,4 @@
1
- import { J as parseProcStatus } from "./dist-Ccmt3fGJ.mjs";
1
+ import { Y as parseProcStatus } from "./dist-D9sltFoR.mjs";
2
2
  import { execFile } from "node:child_process";
3
3
  import * as fs from "node:fs";
4
4
  //#region src/shared/node-topology-platform.ts