@camstack/addon-pipeline 1.2.624 → 1.2.626
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/THIRD_PARTY_MODELS.md +2 -2
- package/dist/audio-analyzer/index.js +3 -3
- package/dist/audio-analyzer/index.mjs +3 -3
- package/dist/{custom-model-catalog-Dx6W1kAo.mjs → custom-model-catalog-CacTUROW.mjs} +6 -6
- package/dist/{custom-model-catalog-6zwaRe6H.js → custom-model-catalog-CgxVHzSZ.js} +6 -6
- package/dist/detection-pipeline/index.js +16 -16
- package/dist/detection-pipeline/index.mjs +16 -16
- package/dist/{dist-BK3z-nti.mjs → dist-Bg9whnXR.mjs} +2055 -58
- package/dist/{dist-63VVVhpw.js → dist-CtbRj-Dn.js} +2055 -58
- package/dist/{model-catalogs-DyOMg-xZ.js → model-catalogs-BQqKruf-.js} +3 -3
- package/dist/{model-catalogs-CllYj2Q2.mjs → model-catalogs-D04DNvMI.mjs} +3 -3
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/{node-BAcWHimZ.mjs → node-CfgKBxdH.mjs} +2 -2
- package/dist/{node-DdaBnHEq.js → node-PivXOnUx.js} +2 -2
- package/dist/pipeline-runner/index.js +20 -20
- package/dist/pipeline-runner/index.mjs +20 -20
- package/dist/{process-memory-CUlknrLl.js → process-memory-68U4DnuZ.js} +1 -1
- package/dist/{process-memory-OZwib1pK.mjs → process-memory-Z6v2Fm60.mjs} +1 -1
- package/dist/recorder/index.js +26 -1816
- package/dist/recorder/index.mjs +26 -1816
- package/dist/{restream-intent-DyGmLAU9.mjs → restream-intent-DvzCnthK.mjs} +1 -1
- package/dist/{restream-intent-7uDNqMKs.js → restream-intent-DzrZ_EHP.js} +1 -1
- package/dist/{segment-demux-js-WNlg0SXP.js → segment-demux-js-BcnG-zVD.js} +1 -1
- package/dist/{segment-demux-js-C3rhCLCG.mjs → segment-demux-js-CRzvBMVr.mjs} +1 -1
- package/dist/session-decode/decode-worker-main.js +8 -8
- package/dist/session-decode/decode-worker-main.mjs +8 -8
- package/dist/stream-broker/_stub.js +1 -1
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-Di7t7N3r.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-B9jSVeoa.mjs} +3 -3
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D-GlPMcf.mjs +26 -0
- package/dist/stream-broker/demux-worker-child.js +1 -1
- package/dist/stream-broker/demux-worker-child.mjs +1 -1
- package/dist/stream-broker/{hostInit-CMDvBrqv.mjs → hostInit-C_J8Mxe2.mjs} +3 -3
- package/dist/stream-broker/index.js +34 -34
- package/dist/stream-broker/index.mjs +34 -34
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/python/inference_pool.py +3 -3
- package/python/postprocessors/ctc.py +1 -1
- package/python/postprocessors/plate_slots.py +2 -2
- package/python/postprocessors/test_ctc.py +1 -1
- package/python/postprocessors/test_plate_slots.py +1 -1
- package/python/postprocessors/test_ssd.py +1 -1
- package/python/postprocessors/test_yolo_split_dfl.py +3 -3
- package/python/postprocessors/test_yolo_split_dfl_numpy.py +5 -5
- package/python/postprocessors/test_yolonas.py +5 -5
- package/python/postprocessors/test_yolov9_edgetpu_concat.py +3 -3
- package/python/postprocessors/testdata/yunet_int8_outputs.json +2 -2
- package/python/postprocessors/yolo_split_dfl.py +5 -5
- package/python/postprocessors/yolonas.py +3 -3
- package/python/test_dequant_edgetpu.py +2 -2
- package/python/test_inference_pool_preprocess.py +2 -2
- package/python/webgpu_isolated.py +1 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DDRGMoJ1.mjs +0 -26
package/THIRD_PARTY_MODELS.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
The package copies (packages/addon-pipeline, packages/addon-post-analysis, packages/addon-ai, packages/addon-model-studio, server/backend) are byte-identical
|
|
10
10
|
(npm cannot ship a file from outside the package); the Hugging Face mirror receives
|
|
11
11
|
the same file from hf/camstack-models/upload.sh. Drift fails CI.
|
|
12
|
-
Facts:
|
|
12
|
+
Facts: planning repo superpowers/specs/2026-09-26-model-license-compliance.md. Not legal advice.
|
|
13
13
|
-->
|
|
14
14
|
|
|
15
15
|
# Third-party models
|
|
@@ -218,6 +218,6 @@ object-detection catalogs) on request. They are downloaded from their
|
|
|
218
218
|
publishers, are not hosted or redistributed by CamStack, and keep their
|
|
219
219
|
publishers' licences; Model Studio shows the licence where the source declares
|
|
220
220
|
one. A model you upload or convert
|
|
221
|
-
yourself, or pull from your own
|
|
221
|
+
yourself, or pull from your own plus catalog account, likewise keeps whatever
|
|
222
222
|
licence its author published. CamStack does not change it and does not record
|
|
223
223
|
it.
|
|
@@ -3,9 +3,9 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-emK7D4bc.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
7
|
-
const require_model_catalogs = require("../model-catalogs-
|
|
8
|
-
const require_process_memory = require("../process-memory-
|
|
6
|
+
const require_dist = require("../dist-CtbRj-Dn.js");
|
|
7
|
+
const require_model_catalogs = require("../model-catalogs-BQqKruf-.js");
|
|
8
|
+
const require_process_memory = require("../process-memory-68U4DnuZ.js");
|
|
9
9
|
let node_fs = require("node:fs");
|
|
10
10
|
node_fs = require_chunk.__toESM(node_fs);
|
|
11
11
|
let node_path = require("node:path");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as __require } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { Er as EventCategory, Gn as BaseAddon, Gt as mapAudioLabelToMacro, I as PoolMemoryWatchdog, Un as errMsg, Xn as audioChunkBytesPerSample, h as DEFAULT_AUDIO_ANALYZER_CONFIG, lr as nodePin, nt as audioAnalyzerCapability, r as AUDIO_BACKEND_CHOICES, rr as hydrateSchema, tr as expandAudioChunkToF32le, tt as audioAnalysisCapability, yn as resolvePoolMemoryPolicy } from "../dist-
|
|
3
|
-
import { n as AUDIO_CLASSIFIER_MODELS } from "../model-catalogs-
|
|
4
|
-
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-
|
|
2
|
+
import { Er as EventCategory, Gn as BaseAddon, Gt as mapAudioLabelToMacro, I as PoolMemoryWatchdog, Un as errMsg, Xn as audioChunkBytesPerSample, h as DEFAULT_AUDIO_ANALYZER_CONFIG, lr as nodePin, nt as audioAnalyzerCapability, r as AUDIO_BACKEND_CHOICES, rr as hydrateSchema, tr as expandAudioChunkToF32le, tt as audioAnalysisCapability, yn as resolvePoolMemoryPolicy } from "../dist-Bg9whnXR.mjs";
|
|
3
|
+
import { n as AUDIO_CLASSIFIER_MODELS } from "../model-catalogs-D04DNvMI.mjs";
|
|
4
|
+
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-Z6v2Fm60.mjs";
|
|
5
5
|
import * as fs from "node:fs";
|
|
6
6
|
import * as path$1 from "node:path";
|
|
7
7
|
import { ensureModel } from "@camstack/system/addon-utils";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { En as stepModelRunsOnFormat, N as OBJECT_DETECTION_STEP_ID, b as DEVICE_BACKEND_TO_FORMAT, f as COCO_80_LABELS, i as AUDIO_MACRO_LABELS, k as LABEL_SUPPLY_VOCABULARIES, p as COCO_TO_MACRO, rt as audioKindId, zt as inferModelProvider } from "./dist-
|
|
2
|
-
import { a as FACE_DETECTION_MODELS, c as OBJECT_DETECTION_MODELS, d as PLATE_OCR_MODELS, f as SEGMENTATION_REFINER_MODELS, i as CLIP_EMBEDDING_MODELS, l as PACKAGE_DETECTION_MODELS, n as AUDIO_CLASSIFIER_MODELS, o as FACE_EMBEDDING_MODELS, p as VEHICLE_CLASSIFIER_MODELS, r as BIRD_CLASSIFIER_MODELS, s as INSTANCE_SEGMENTATION_MODELS, t as ANIMAL_CLASSIFIER_MODELS, u as PLATE_DETECTION_MODELS } from "./model-catalogs-
|
|
1
|
+
import { En as stepModelRunsOnFormat, N as OBJECT_DETECTION_STEP_ID, b as DEVICE_BACKEND_TO_FORMAT, f as COCO_80_LABELS, i as AUDIO_MACRO_LABELS, k as LABEL_SUPPLY_VOCABULARIES, p as COCO_TO_MACRO, rt as audioKindId, zt as inferModelProvider } from "./dist-Bg9whnXR.mjs";
|
|
2
|
+
import { a as FACE_DETECTION_MODELS, c as OBJECT_DETECTION_MODELS, d as PLATE_OCR_MODELS, f as SEGMENTATION_REFINER_MODELS, i as CLIP_EMBEDDING_MODELS, l as PACKAGE_DETECTION_MODELS, n as AUDIO_CLASSIFIER_MODELS, o as FACE_EMBEDDING_MODELS, p as VEHICLE_CLASSIFIER_MODELS, r as BIRD_CLASSIFIER_MODELS, s as INSTANCE_SEGMENTATION_MODELS, t as ANIMAL_CLASSIFIER_MODELS, u as PLATE_DETECTION_MODELS } from "./model-catalogs-D04DNvMI.mjs";
|
|
3
3
|
import { t as isWorkerReply } from "./worker-protocol-_avq7y8O.mjs";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
//#region src/detection-pipeline/registry/effective-confidence.ts
|
|
@@ -309,7 +309,7 @@ var AnimalClassifierStep = class {
|
|
|
309
309
|
* Why it exists: the 0.5 floor lived only in `definition.defaultConfidence`,
|
|
310
310
|
* which is forwarded to the Python pool and reachable from no operator surface
|
|
311
311
|
* (the catalog carries `configSchema` to the admin-ui; an empty schema renders
|
|
312
|
-
* no form). Camera
|
|
312
|
+
* no form). Camera 101 reported a DOORMAT at 0.5669 on 2026-08-07, and the
|
|
313
313
|
* model's own benchmark had already noted a doormat near-FP at 0.49 — the
|
|
314
314
|
* shipped floor sat 0.01 above a known false positive with no way to move it.
|
|
315
315
|
*
|
|
@@ -324,7 +324,7 @@ var PackageDetectionStep = class extends PipelineStepBase {
|
|
|
324
324
|
type: "slider",
|
|
325
325
|
key: "minConfidencePackage",
|
|
326
326
|
label: "Min Confidence — Package",
|
|
327
|
-
description: "Drop package predictions below this score. NOTE: raising it does NOT fix a recurring static false positive — measured on device
|
|
327
|
+
description: "Drop package predictions below this score. NOTE: raising it does NOT fix a recurring static false positive — measured on device 101, 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%).",
|
|
328
328
|
min: 0,
|
|
329
329
|
max: 1,
|
|
330
330
|
step: .05,
|
|
@@ -831,7 +831,7 @@ var DEFAULT_FIRST_FRAME_TIMEOUT_MS = 2e4;
|
|
|
831
831
|
* Hard ceiling on the TOTAL wait for the FIRST frame of a dial.
|
|
832
832
|
*
|
|
833
833
|
* The first decodable frame is not a fixed cost: it is one IDR interval plus
|
|
834
|
-
* every GOP the decoder has to discard. Measured on device
|
|
834
|
+
* every GOP the decoder has to discard. Measured on device 108 (2560x1440
|
|
835
835
|
* h264, `Invalid NAL unit` / `corrupt decoded frame` in its bitstream), dial →
|
|
836
836
|
* first decoded frame over the broker's own muted restream was 1.8 / 6.5 / 7.0
|
|
837
837
|
* / 7.2 / 9.2 / 10.0 / 10.8 / 12.9 / 14.9 / 20.0 / 30.3 / >40 s across 12
|
|
@@ -859,7 +859,7 @@ var DEFAULT_FIRST_FRAME_TIMEOUT_MS = 2e4;
|
|
|
859
859
|
* Abandoning at 20 s was therefore not a timeout, it was a coin flip, and the
|
|
860
860
|
* recovery made it worse: ending the session RE-DIALS, which throws the
|
|
861
861
|
* accumulated wait away and re-pays the RTSP setup + probe from zero, and two
|
|
862
|
-
* ends inside 60 s DETACH the camera. That loop cost
|
|
862
|
+
* ends inside 60 s DETACH the camera. That loop cost 108 25.9% of its assigned
|
|
863
863
|
* decode airtime in one day (325 of 1257 ten-second windows delivered nothing).
|
|
864
864
|
*
|
|
865
865
|
* The wait is bounded instead of deadlined: the worker keeps the outstanding
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const require_dist = require("./dist-
|
|
2
|
-
const require_model_catalogs = require("./model-catalogs-
|
|
1
|
+
const require_dist = require("./dist-CtbRj-Dn.js");
|
|
2
|
+
const require_model_catalogs = require("./model-catalogs-BQqKruf-.js");
|
|
3
3
|
const require_worker_protocol = require("./worker-protocol-DngGEAT2.js");
|
|
4
4
|
let node_crypto = require("node:crypto");
|
|
5
5
|
//#region src/detection-pipeline/registry/effective-confidence.ts
|
|
@@ -309,7 +309,7 @@ var AnimalClassifierStep = class {
|
|
|
309
309
|
* Why it exists: the 0.5 floor lived only in `definition.defaultConfidence`,
|
|
310
310
|
* which is forwarded to the Python pool and reachable from no operator surface
|
|
311
311
|
* (the catalog carries `configSchema` to the admin-ui; an empty schema renders
|
|
312
|
-
* no form). Camera
|
|
312
|
+
* no form). Camera 101 reported a DOORMAT at 0.5669 on 2026-08-07, and the
|
|
313
313
|
* model's own benchmark had already noted a doormat near-FP at 0.49 — the
|
|
314
314
|
* shipped floor sat 0.01 above a known false positive with no way to move it.
|
|
315
315
|
*
|
|
@@ -324,7 +324,7 @@ var PackageDetectionStep = class extends PipelineStepBase {
|
|
|
324
324
|
type: "slider",
|
|
325
325
|
key: "minConfidencePackage",
|
|
326
326
|
label: "Min Confidence — Package",
|
|
327
|
-
description: "Drop package predictions below this score. NOTE: raising it does NOT fix a recurring static false positive — measured on device
|
|
327
|
+
description: "Drop package predictions below this score. NOTE: raising it does NOT fix a recurring static false positive — measured on device 101, 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%).",
|
|
328
328
|
min: 0,
|
|
329
329
|
max: 1,
|
|
330
330
|
step: .05,
|
|
@@ -831,7 +831,7 @@ var DEFAULT_FIRST_FRAME_TIMEOUT_MS = 2e4;
|
|
|
831
831
|
* Hard ceiling on the TOTAL wait for the FIRST frame of a dial.
|
|
832
832
|
*
|
|
833
833
|
* The first decodable frame is not a fixed cost: it is one IDR interval plus
|
|
834
|
-
* every GOP the decoder has to discard. Measured on device
|
|
834
|
+
* every GOP the decoder has to discard. Measured on device 108 (2560x1440
|
|
835
835
|
* h264, `Invalid NAL unit` / `corrupt decoded frame` in its bitstream), dial →
|
|
836
836
|
* first decoded frame over the broker's own muted restream was 1.8 / 6.5 / 7.0
|
|
837
837
|
* / 7.2 / 9.2 / 10.0 / 10.8 / 12.9 / 14.9 / 20.0 / 30.3 / >40 s across 12
|
|
@@ -859,7 +859,7 @@ var DEFAULT_FIRST_FRAME_TIMEOUT_MS = 2e4;
|
|
|
859
859
|
* Abandoning at 20 s was therefore not a timeout, it was a coin flip, and the
|
|
860
860
|
* recovery made it worse: ending the session RE-DIALS, which throws the
|
|
861
861
|
* accumulated wait away and re-pays the RTSP setup + probe from zero, and two
|
|
862
|
-
* ends inside 60 s DETACH the camera. That loop cost
|
|
862
|
+
* ends inside 60 s DETACH the camera. That loop cost 108 25.9% of its assigned
|
|
863
863
|
* decode airtime in one day (325 of 1257 ten-second windows delivered nothing).
|
|
864
864
|
*
|
|
865
865
|
* The wait is bounded instead of deadlined: the worker keeps the outstanding
|
|
@@ -3,11 +3,11 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-emK7D4bc.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
7
|
-
const require_node = require("../node-
|
|
8
|
-
const require_custom_model_catalog = require("../custom-model-catalog-
|
|
6
|
+
const require_dist = require("../dist-CtbRj-Dn.js");
|
|
7
|
+
const require_node = require("../node-PivXOnUx.js");
|
|
8
|
+
const require_custom_model_catalog = require("../custom-model-catalog-CgxVHzSZ.js");
|
|
9
9
|
const require_lazy_sharp = require("../lazy-sharp-BuwKlQLR.js");
|
|
10
|
-
const require_process_memory = require("../process-memory-
|
|
10
|
+
const require_process_memory = require("../process-memory-68U4DnuZ.js");
|
|
11
11
|
let node_os = require("node:os");
|
|
12
12
|
node_os = require_chunk.__toESM(node_os);
|
|
13
13
|
let node_fs = require("node:fs");
|
|
@@ -873,7 +873,7 @@ var POOL_POISON_DRAIN_SLACK_MS = 1e3;
|
|
|
873
873
|
* Max inference requests outstanding to ONE worker before new ones are SHED.
|
|
874
874
|
*
|
|
875
875
|
* Without this the camera dies permanently the first time the worker gets
|
|
876
|
-
* slow, and it did: device
|
|
876
|
+
* slow, and it did: device 101 produced nothing for 52 minutes on 2026-07-31.
|
|
877
877
|
* The worker was neither dead nor deadlocked — it was replying at full rate,
|
|
878
878
|
* about a minute behind, and every reply landed after {@link
|
|
879
879
|
* POOL_INFER_TIMEOUT_MS} had already abandoned its request. The proof is in the
|
|
@@ -2380,7 +2380,7 @@ function resolveEffectivePostprocessor(definition, modelId) {
|
|
|
2380
2380
|
* Entry-based variant for callers that already hold the `ModelCatalogEntry` —
|
|
2381
2381
|
* required for CUSTOM (operator-registered) models, which are NOT in
|
|
2382
2382
|
* `definition.models` and would otherwise silently fall back to the step
|
|
2383
|
-
* default decode (a
|
|
2383
|
+
* default decode (a plus catalog `yolonas` model decoded as `yolo` produces no
|
|
2384
2384
|
* error anywhere, just zero detections).
|
|
2385
2385
|
*/
|
|
2386
2386
|
function resolveEffectivePostprocessorForEntry(definition, entry) {
|
|
@@ -4993,7 +4993,7 @@ function normalizeOutput(output) {
|
|
|
4993
4993
|
* how rare full-frame phantoms are, which is the point: if this floods, that is
|
|
4994
4994
|
* itself the finding."*
|
|
4995
4995
|
*
|
|
4996
|
-
* It flooded. Camera
|
|
4996
|
+
* It flooded. Camera 101 emits a persistent full-frame `vehicle` phantom
|
|
4997
4997
|
* (score ~0.62, areaRatio 0.949) and the guard was writing **dozens of INFO
|
|
4998
4998
|
* lines a second** on 2026-08-02. So the finding stands — that camera has a
|
|
4999
4999
|
* standing phantom worth investigating — but the log volume is now costing more
|
|
@@ -5474,7 +5474,7 @@ async function alignFaceCrop(fullFrameJpeg, faceBbox, landmarksImageSpace, image
|
|
|
5474
5474
|
* Detection score at/above which a near-full-frame box is trusted as a REAL
|
|
5475
5475
|
* close subject rather than a phantom. Below this bar a full-frame box is
|
|
5476
5476
|
* dropped; at/above it survives (a full-frame crop of a genuine close subject
|
|
5477
|
-
* beats a phantom occupancy chip). The observed cam-
|
|
5477
|
+
* beats a phantom occupancy chip). The observed cam-101 phantom scored 0.52,
|
|
5478
5478
|
* comfortably under this 0.70 bar; a genuine object right under the lens
|
|
5479
5479
|
* (doorbell close-ups) commonly scores 0.65-0.85 — 0.70 keeps the legit band
|
|
5480
5480
|
* above the bar while holding a wide margin over observed phantoms (~0.52).
|
|
@@ -5520,7 +5520,7 @@ function isUsableHardAreaCut(ratio) {
|
|
|
5520
5520
|
* edge-to-edge in one axis) but SURVIVES because its score cleared the
|
|
5521
5521
|
* confidence bar.
|
|
5522
5522
|
*
|
|
5523
|
-
* These are the ones worth counting: on 2026-07-30 device
|
|
5523
|
+
* These are the ones worth counting: on 2026-07-30 device 101 produced six
|
|
5524
5524
|
* such boxes in a day, at 0.710-0.787, and they were only found by an offline
|
|
5525
5525
|
* sweep of stored events — nothing in production reported them. Arming the
|
|
5526
5526
|
* hard-area cut on a camera should be a decision made from this count, not
|
|
@@ -5613,7 +5613,7 @@ async function nativeChildCrop(provider, bbox, imageWidth, imageHeight, maxWidth
|
|
|
5613
5613
|
* Plate-crop DESKEW — rotation rectification for oblique licence-plate crops.
|
|
5614
5614
|
*
|
|
5615
5615
|
* Plate crops reach the CTC recognizer as an axis-aligned bbox tile with NO
|
|
5616
|
-
* geometric correction. On steeply oblique cameras (cam
|
|
5616
|
+
* geometric correction. On steeply oblique cameras (cam 102) the plate text is
|
|
5617
5617
|
* skewed, and CTC collapses beyond ~10-15° of baseline tilt. This module
|
|
5618
5618
|
* estimates the plate's dominant rotation from the crop ALONE (no plate quad is
|
|
5619
5619
|
* available) and rotates the tile so the text baseline is horizontal before OCR.
|
|
@@ -5973,13 +5973,13 @@ var PLATE_OCR_CROP_POLICIES = {
|
|
|
5973
5973
|
}
|
|
5974
5974
|
};
|
|
5975
5975
|
/**
|
|
5976
|
-
* The margin around a plate box drawn by the ROOT model (D730) — a
|
|
5976
|
+
* The margin around a plate box drawn by the ROOT model (D730) — a plus catalog
|
|
5977
5977
|
* `license_plate` read in place of `plate-detection`'s own box.
|
|
5978
5978
|
*
|
|
5979
5979
|
* The margin is a property of the box's detector (see above), and this
|
|
5980
5980
|
* detector's boxes have never been measured against the plate readers: 0.15 is
|
|
5981
5981
|
* the value that served a TIGHT detector box (the deleted `yolov8n-plate`,
|
|
5982
|
-
* 7/7 Kia reads at 0.13–0.16), on the assumption that
|
|
5982
|
+
* 7/7 Kia reads at 0.13–0.16), on the assumption that plus catalog boxes are
|
|
5983
5983
|
* tight as well. It is uncalibrated and needs measuring on a ground-truth set
|
|
5984
5984
|
* of root-supplied plates before it is trusted; until then it applies to every
|
|
5985
5985
|
* reader alike, replacing the reader's own detector-specific margin.
|
|
@@ -6106,7 +6106,7 @@ function attachRootChildBoxes(candidates, parents, modelId, idGen) {
|
|
|
6106
6106
|
* camera, is a rotated trapezoid inside it. Two things then destroy the read,
|
|
6107
6107
|
* and neither is a resolution problem:
|
|
6108
6108
|
*
|
|
6109
|
-
* 1. **Aspect.** A German plate is 4.7 : 1. The boxes cam
|
|
6109
|
+
* 1. **Aspect.** A German plate is 4.7 : 1. The boxes cam 102 produces measure
|
|
6110
6110
|
* 1.3 – 2.0 : 1 — the box is 2-3× too tall because it circumscribes a
|
|
6111
6111
|
* tilted rectangle. The recognizer resizes its input to a fixed 64px height
|
|
6112
6112
|
* preserving aspect, so a 1.5 : 1 tile becomes ~96px wide: seven glyphs get
|
|
@@ -6123,7 +6123,7 @@ function attachRootChildBoxes(candidates, parents, modelId, idGen) {
|
|
|
6123
6123
|
* OpenCV, no new dependency — sharp only decodes and re-encodes, exactly as
|
|
6124
6124
|
* `plate-deskew.ts` and `native-child-crop.ts` do.
|
|
6125
6125
|
*
|
|
6126
|
-
* MEASURED on 21 ground-truthed cam-
|
|
6126
|
+
* MEASURED on 21 ground-truthed cam-102 plate crops (9 distinct vehicles,
|
|
6127
6127
|
* 2026-08-20 offline replay against the production `vgg_english_g2` weights and
|
|
6128
6128
|
* the production CTC postprocessor):
|
|
6129
6129
|
*
|
|
@@ -8673,7 +8673,7 @@ var DetectionPipelineProvider = class DetectionPipelineProvider {
|
|
|
8673
8673
|
*
|
|
8674
8674
|
* That false positive is not cosmetic. It is a readiness gate answering yes
|
|
8675
8675
|
* on another machine's evidence, and it is exactly the log line that made a
|
|
8676
|
-
* node with NO platform-probe addon at all (
|
|
8676
|
+
* node with NO platform-probe addon at all (agent-a, 2026-08-07: its
|
|
8677
8677
|
* `@camstack/system` package had been renamed out of `/data/addons`) look
|
|
8678
8678
|
* like a node with a lossy event path. The pin makes the answer local: an
|
|
8679
8679
|
* inline `nodeId` is the routing pin that survives the forked-addon → parent
|
|
@@ -9899,7 +9899,7 @@ var DetectionPipelineProvider = class DetectionPipelineProvider {
|
|
|
9899
9899
|
}
|
|
9900
9900
|
/**
|
|
9901
9901
|
* Resolve a dispatch's step tree against its target engine, with the
|
|
9902
|
-
* CAPABILITY GATE + node-local engine fallback (cam-
|
|
9902
|
+
* CAPABILITY GATE + node-local engine fallback (cam-101, 2026-08-01;
|
|
9903
9903
|
* per-step split 2026-08-01 evening).
|
|
9904
9904
|
*
|
|
9905
9905
|
* A per-call `deviceKey` (orchestrator device routing / detail-plane step
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { n as __require } from "../chunk-DnnnRqeS.mjs";
|
|
2
|
-
import { $ as applyModelBoundSettings, Cn as runtimeDevices$1, Dt as enumerateInferenceDevices, En as stepModelRunsOnFormat, Er as EventCategory, Gn as BaseAddon, I as PoolMemoryWatchdog, O as LABEL_SUPPLY_MACRO, Ot as evaluateZoneRules, Qt as overlayClusterStepSettings, Sn as rootSuppliesOf, Tr as union, Un as errMsg, Ut as loadContributionCapability, Vt as linkedLabelStepId, Y as YAMNET_TO_MACRO, Zn as createEvent, d as CLUSTER_MODEL_SCOPED_STEPS, dt as containingParentIndex, en as pickClusterStepSettings, fr as sleep, g as DEFAULT_CLUSTER_STEP_SETTINGS, gt as defaultDeviceFor$1, hr as array, jn as supportedRuntimes$1, lr as nodePin, mn as resolveClusterStepModelId, n as APPLE_SA_TO_MACRO, nr as hfModelUrl, rn as pipelineExecutorCapability, rr as hydrateSchema, ut as collectModelBoundKeys, wr as string, wt as edgetpuDelegateDevice, xr as object, xt as detectionPipelineCapability, yn as resolvePoolMemoryPolicy } from "../dist-
|
|
3
|
-
import { c as readProcessCost } from "../node-
|
|
4
|
-
import { S as resolveModelDefaultConfidence, _ as getDefaultModelForFormat, b as resolveModelForFormat, c as resolveDefaultDetectionModel, d as localFrameRegistry, g as ALL_STEPS, h as ALL_PIPELINE_STEPS, l as macroGateVerdict, n as mergeCustomModels, o as deviceKeyOf, r as buildSubtreeCanRun, s as resolveDeviceEngine, t as CustomModelCatalog, v as getStep, x as landmarkPrecisionVerdict, y as getStepDefinition } from "../custom-model-catalog-
|
|
2
|
+
import { $ as applyModelBoundSettings, Cn as runtimeDevices$1, Dt as enumerateInferenceDevices, En as stepModelRunsOnFormat, Er as EventCategory, Gn as BaseAddon, I as PoolMemoryWatchdog, O as LABEL_SUPPLY_MACRO, Ot as evaluateZoneRules, Qt as overlayClusterStepSettings, Sn as rootSuppliesOf, Tr as union, Un as errMsg, Ut as loadContributionCapability, Vt as linkedLabelStepId, Y as YAMNET_TO_MACRO, Zn as createEvent, d as CLUSTER_MODEL_SCOPED_STEPS, dt as containingParentIndex, en as pickClusterStepSettings, fr as sleep, g as DEFAULT_CLUSTER_STEP_SETTINGS, gt as defaultDeviceFor$1, hr as array, jn as supportedRuntimes$1, lr as nodePin, mn as resolveClusterStepModelId, n as APPLE_SA_TO_MACRO, nr as hfModelUrl, rn as pipelineExecutorCapability, rr as hydrateSchema, ut as collectModelBoundKeys, wr as string, wt as edgetpuDelegateDevice, xr as object, xt as detectionPipelineCapability, yn as resolvePoolMemoryPolicy } from "../dist-Bg9whnXR.mjs";
|
|
3
|
+
import { c as readProcessCost } from "../node-CfgKBxdH.mjs";
|
|
4
|
+
import { S as resolveModelDefaultConfidence, _ as getDefaultModelForFormat, b as resolveModelForFormat, c as resolveDefaultDetectionModel, d as localFrameRegistry, g as ALL_STEPS, h as ALL_PIPELINE_STEPS, l as macroGateVerdict, n as mergeCustomModels, o as deviceKeyOf, r as buildSubtreeCanRun, s as resolveDeviceEngine, t as CustomModelCatalog, v as getStep, x as landmarkPrecisionVerdict, y as getStepDefinition } from "../custom-model-catalog-CacTUROW.mjs";
|
|
5
5
|
import { t as getSharp } from "../lazy-sharp-DXsqwpph.mjs";
|
|
6
|
-
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-
|
|
6
|
+
import { n as pickNodePlatformArch, t as readProcessMemory } from "../process-memory-Z6v2Fm60.mjs";
|
|
7
7
|
import * as os$1 from "node:os";
|
|
8
8
|
import * as fs from "node:fs";
|
|
9
9
|
import * as path$1 from "node:path";
|
|
@@ -866,7 +866,7 @@ var POOL_POISON_DRAIN_SLACK_MS = 1e3;
|
|
|
866
866
|
* Max inference requests outstanding to ONE worker before new ones are SHED.
|
|
867
867
|
*
|
|
868
868
|
* Without this the camera dies permanently the first time the worker gets
|
|
869
|
-
* slow, and it did: device
|
|
869
|
+
* slow, and it did: device 101 produced nothing for 52 minutes on 2026-07-31.
|
|
870
870
|
* The worker was neither dead nor deadlocked — it was replying at full rate,
|
|
871
871
|
* about a minute behind, and every reply landed after {@link
|
|
872
872
|
* POOL_INFER_TIMEOUT_MS} had already abandoned its request. The proof is in the
|
|
@@ -2373,7 +2373,7 @@ function resolveEffectivePostprocessor(definition, modelId) {
|
|
|
2373
2373
|
* Entry-based variant for callers that already hold the `ModelCatalogEntry` —
|
|
2374
2374
|
* required for CUSTOM (operator-registered) models, which are NOT in
|
|
2375
2375
|
* `definition.models` and would otherwise silently fall back to the step
|
|
2376
|
-
* default decode (a
|
|
2376
|
+
* default decode (a plus catalog `yolonas` model decoded as `yolo` produces no
|
|
2377
2377
|
* error anywhere, just zero detections).
|
|
2378
2378
|
*/
|
|
2379
2379
|
function resolveEffectivePostprocessorForEntry(definition, entry) {
|
|
@@ -4986,7 +4986,7 @@ function normalizeOutput(output) {
|
|
|
4986
4986
|
* how rare full-frame phantoms are, which is the point: if this floods, that is
|
|
4987
4987
|
* itself the finding."*
|
|
4988
4988
|
*
|
|
4989
|
-
* It flooded. Camera
|
|
4989
|
+
* It flooded. Camera 101 emits a persistent full-frame `vehicle` phantom
|
|
4990
4990
|
* (score ~0.62, areaRatio 0.949) and the guard was writing **dozens of INFO
|
|
4991
4991
|
* lines a second** on 2026-08-02. So the finding stands — that camera has a
|
|
4992
4992
|
* standing phantom worth investigating — but the log volume is now costing more
|
|
@@ -5467,7 +5467,7 @@ async function alignFaceCrop(fullFrameJpeg, faceBbox, landmarksImageSpace, image
|
|
|
5467
5467
|
* Detection score at/above which a near-full-frame box is trusted as a REAL
|
|
5468
5468
|
* close subject rather than a phantom. Below this bar a full-frame box is
|
|
5469
5469
|
* dropped; at/above it survives (a full-frame crop of a genuine close subject
|
|
5470
|
-
* beats a phantom occupancy chip). The observed cam-
|
|
5470
|
+
* beats a phantom occupancy chip). The observed cam-101 phantom scored 0.52,
|
|
5471
5471
|
* comfortably under this 0.70 bar; a genuine object right under the lens
|
|
5472
5472
|
* (doorbell close-ups) commonly scores 0.65-0.85 — 0.70 keeps the legit band
|
|
5473
5473
|
* above the bar while holding a wide margin over observed phantoms (~0.52).
|
|
@@ -5513,7 +5513,7 @@ function isUsableHardAreaCut(ratio) {
|
|
|
5513
5513
|
* edge-to-edge in one axis) but SURVIVES because its score cleared the
|
|
5514
5514
|
* confidence bar.
|
|
5515
5515
|
*
|
|
5516
|
-
* These are the ones worth counting: on 2026-07-30 device
|
|
5516
|
+
* These are the ones worth counting: on 2026-07-30 device 101 produced six
|
|
5517
5517
|
* such boxes in a day, at 0.710-0.787, and they were only found by an offline
|
|
5518
5518
|
* sweep of stored events — nothing in production reported them. Arming the
|
|
5519
5519
|
* hard-area cut on a camera should be a decision made from this count, not
|
|
@@ -5606,7 +5606,7 @@ async function nativeChildCrop(provider, bbox, imageWidth, imageHeight, maxWidth
|
|
|
5606
5606
|
* Plate-crop DESKEW — rotation rectification for oblique licence-plate crops.
|
|
5607
5607
|
*
|
|
5608
5608
|
* Plate crops reach the CTC recognizer as an axis-aligned bbox tile with NO
|
|
5609
|
-
* geometric correction. On steeply oblique cameras (cam
|
|
5609
|
+
* geometric correction. On steeply oblique cameras (cam 102) the plate text is
|
|
5610
5610
|
* skewed, and CTC collapses beyond ~10-15° of baseline tilt. This module
|
|
5611
5611
|
* estimates the plate's dominant rotation from the crop ALONE (no plate quad is
|
|
5612
5612
|
* available) and rotates the tile so the text baseline is horizontal before OCR.
|
|
@@ -5966,13 +5966,13 @@ var PLATE_OCR_CROP_POLICIES = {
|
|
|
5966
5966
|
}
|
|
5967
5967
|
};
|
|
5968
5968
|
/**
|
|
5969
|
-
* The margin around a plate box drawn by the ROOT model (D730) — a
|
|
5969
|
+
* The margin around a plate box drawn by the ROOT model (D730) — a plus catalog
|
|
5970
5970
|
* `license_plate` read in place of `plate-detection`'s own box.
|
|
5971
5971
|
*
|
|
5972
5972
|
* The margin is a property of the box's detector (see above), and this
|
|
5973
5973
|
* detector's boxes have never been measured against the plate readers: 0.15 is
|
|
5974
5974
|
* the value that served a TIGHT detector box (the deleted `yolov8n-plate`,
|
|
5975
|
-
* 7/7 Kia reads at 0.13–0.16), on the assumption that
|
|
5975
|
+
* 7/7 Kia reads at 0.13–0.16), on the assumption that plus catalog boxes are
|
|
5976
5976
|
* tight as well. It is uncalibrated and needs measuring on a ground-truth set
|
|
5977
5977
|
* of root-supplied plates before it is trusted; until then it applies to every
|
|
5978
5978
|
* reader alike, replacing the reader's own detector-specific margin.
|
|
@@ -6099,7 +6099,7 @@ function attachRootChildBoxes(candidates, parents, modelId, idGen) {
|
|
|
6099
6099
|
* camera, is a rotated trapezoid inside it. Two things then destroy the read,
|
|
6100
6100
|
* and neither is a resolution problem:
|
|
6101
6101
|
*
|
|
6102
|
-
* 1. **Aspect.** A German plate is 4.7 : 1. The boxes cam
|
|
6102
|
+
* 1. **Aspect.** A German plate is 4.7 : 1. The boxes cam 102 produces measure
|
|
6103
6103
|
* 1.3 – 2.0 : 1 — the box is 2-3× too tall because it circumscribes a
|
|
6104
6104
|
* tilted rectangle. The recognizer resizes its input to a fixed 64px height
|
|
6105
6105
|
* preserving aspect, so a 1.5 : 1 tile becomes ~96px wide: seven glyphs get
|
|
@@ -6116,7 +6116,7 @@ function attachRootChildBoxes(candidates, parents, modelId, idGen) {
|
|
|
6116
6116
|
* OpenCV, no new dependency — sharp only decodes and re-encodes, exactly as
|
|
6117
6117
|
* `plate-deskew.ts` and `native-child-crop.ts` do.
|
|
6118
6118
|
*
|
|
6119
|
-
* MEASURED on 21 ground-truthed cam-
|
|
6119
|
+
* MEASURED on 21 ground-truthed cam-102 plate crops (9 distinct vehicles,
|
|
6120
6120
|
* 2026-08-20 offline replay against the production `vgg_english_g2` weights and
|
|
6121
6121
|
* the production CTC postprocessor):
|
|
6122
6122
|
*
|
|
@@ -8666,7 +8666,7 @@ var DetectionPipelineProvider = class DetectionPipelineProvider {
|
|
|
8666
8666
|
*
|
|
8667
8667
|
* That false positive is not cosmetic. It is a readiness gate answering yes
|
|
8668
8668
|
* on another machine's evidence, and it is exactly the log line that made a
|
|
8669
|
-
* node with NO platform-probe addon at all (
|
|
8669
|
+
* node with NO platform-probe addon at all (agent-a, 2026-08-07: its
|
|
8670
8670
|
* `@camstack/system` package had been renamed out of `/data/addons`) look
|
|
8671
8671
|
* like a node with a lossy event path. The pin makes the answer local: an
|
|
8672
8672
|
* inline `nodeId` is the routing pin that survives the forked-addon → parent
|
|
@@ -9892,7 +9892,7 @@ var DetectionPipelineProvider = class DetectionPipelineProvider {
|
|
|
9892
9892
|
}
|
|
9893
9893
|
/**
|
|
9894
9894
|
* Resolve a dispatch's step tree against its target engine, with the
|
|
9895
|
-
* CAPABILITY GATE + node-local engine fallback (cam-
|
|
9895
|
+
* CAPABILITY GATE + node-local engine fallback (cam-101, 2026-08-01;
|
|
9896
9896
|
* per-step split 2026-08-01 evening).
|
|
9897
9897
|
*
|
|
9898
9898
|
* A per-call `deviceKey` (orchestrator device routing / detail-plane step
|