@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.
- package/dist/{addon-utils-CLc6yHCN.js → addon-utils-DRbRzrDy.js} +1 -1
- package/dist/audio-analyzer/index.js +3 -3
- package/dist/audio-analyzer/index.mjs +2 -2
- package/dist/detection-pipeline/index.js +844 -110
- package/dist/detection-pipeline/index.mjs +842 -108
- package/dist/{dist-Ccmt3fGJ.mjs → dist-D9sltFoR.mjs} +230 -6
- package/dist/{dist-C11WuNUP.js → dist-gLAVhbvO.js} +247 -5
- package/dist/{event-loop-stall-monitor-OJrOMeuu.mjs → event-loop-stall-monitor-BS_lPX6H.mjs} +82 -88
- package/dist/{event-loop-stall-monitor-Cq_NeC4o.js → event-loop-stall-monitor-BUhYY39J.js} +82 -88
- package/dist/{lazy-sharp-RxUs6on_.js → lazy-sharp-OiAUva0g.js} +1 -1
- package/dist/motion-wasm/index.js +2 -2
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/pipeline-runner/index.js +8 -6
- package/dist/pipeline-runner/index.mjs +6 -4
- package/dist/{process-memory-DOjQ3MgC.js → process-memory-DY4RHcTj.js} +1 -1
- package/dist/{process-memory-D0zDmXLI.mjs → process-memory-Dw7-9jCI.mjs} +1 -1
- package/dist/recorder/index.js +660 -130
- package/dist/recorder/index.mjs +659 -129
- package/dist/remote-restream-BeHi78PZ.mjs +25 -0
- package/dist/remote-restream-CO36Sr30.js +36 -0
- package/dist/restream-intent-B4BXZra7.mjs +72 -0
- package/dist/{remote-restream-BYbAsgUf.js → restream-intent-Cv9x3jmu.js} +30 -30
- package/dist/session-decode/decode-worker-child.js +2 -2
- package/dist/session-decode/decode-worker-child.mjs +1 -1
- package/dist/stream-broker/_stub.js +1 -1
- 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
- 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
- package/dist/stream-broker/{hostInit-Da9wVA2r.mjs → hostInit-aZY81RnZ.mjs} +3 -3
- package/dist/stream-broker/index.js +598 -82
- package/dist/stream-broker/index.mjs +597 -81
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/dist/{worker-protocol-DDpliBIW.mjs → worker-protocol-Bz7-sMZC.mjs} +1 -1
- package/dist/{worker-protocol-BePduZVV.js → worker-protocol-D_0q_4Le.js} +1 -1
- package/package.json +1 -1
- package/python/inference_pool.py +193 -1
- package/python/postprocessors/__init__.py +4 -0
- package/python/postprocessors/ctc.py +52 -0
- package/python/postprocessors/plate_slots.py +180 -0
- package/python/postprocessors/test_ctc.py +39 -0
- package/python/postprocessors/test_plate_slots.py +217 -0
- package/python/postprocessors/test_yolonas.py +83 -0
- package/python/postprocessors/yolonas.py +67 -0
- package/python/test_inference_pool_backpressure.py +6 -2
- package/python/test_inference_pool_coreml_cache.py +12 -4
- package/python/test_inference_pool_device_selection.py +12 -4
- package/python/test_inference_pool_layout.py +16 -5
- package/python/test_inference_pool_memstats.py +6 -2
- package/python/test_inference_pool_ov_ppp.py +12 -9
- package/python/test_inference_pool_preprocess.py +57 -0
- package/python/test_inference_pool_static_batch.py +426 -0
- package/dist/remote-restream-Ci7RXNGb.mjs +0 -66
- 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
package/dist/{event-loop-stall-monitor-OJrOMeuu.mjs → event-loop-stall-monitor-BS_lPX6H.mjs}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
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: "
|
|
1142
|
-
name: "
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
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: "
|
|
1171
|
-
name: "
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
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.
|
|
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: "
|
|
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-
|
|
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
|
|
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
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
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: "
|
|
1142
|
-
name: "
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
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: "
|
|
1171
|
-
name: "
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
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.
|
|
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: "
|
|
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
|
|
@@ -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-
|
|
6
|
-
const require_lazy_sharp = require("../lazy-sharp-
|
|
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 {
|
|
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-
|
|
6
|
-
const require_event_loop_stall_monitor = require("../event-loop-stall-monitor-
|
|
7
|
-
const require_worker_protocol = require("../worker-protocol-
|
|
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-
|
|
10
|
-
const
|
|
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 ?
|
|
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 {
|
|
2
|
-
import { c as getStepDefinition, t as attributeStall } from "../event-loop-stall-monitor-
|
|
3
|
-
import { a as nativeLeaseSettingEnv, t as isWorkerReply } from "../worker-protocol-
|
|
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 {
|
|
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 } : {},
|