@camstack/addon-pipeline 1.2.329 → 1.2.330
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/audio-analyzer/index.js +2 -2
- package/dist/audio-analyzer/index.mjs +2 -2
- package/dist/{default-detection-model-ChH7Y219.js → default-detection-model-B6gKGnfx.js} +39 -67
- package/dist/{default-detection-model-j0nBpRoB.mjs → default-detection-model-CPDT_eFT.mjs} +39 -67
- package/dist/detection-pipeline/index.js +197 -31
- package/dist/detection-pipeline/index.mjs +197 -31
- package/dist/{dist-BlIWhjnu.js → dist-CMeICL07.js} +771 -464
- package/dist/{dist-0HoA3wAi.mjs → dist-CuPEyZY2.mjs} +726 -437
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/{node-HOMWRPzW.mjs → node-USq5jYwq.mjs} +1 -1
- package/dist/{node-BPpVMnZy.js → node-X_0Tka7-.js} +1 -1
- package/dist/pipeline-runner/index.js +355 -104
- package/dist/pipeline-runner/index.mjs +355 -104
- package/dist/{process-memory-DuF8pa2w.mjs → process-memory-07XYts8V.mjs} +1 -1
- package/dist/{process-memory-BW06vOIQ.js → process-memory-o4LFWbBN.js} +1 -1
- package/dist/recorder/index.js +7 -7
- package/dist/recorder/index.mjs +7 -7
- package/dist/{segment-demux-js-BU2MXpln.mjs → segment-demux-js-Bq8DrH0b.mjs} +2 -2
- package/dist/{segment-demux-js-Dl52Zz8w.js → segment-demux-js-FqaQjG7n.js} +2 -2
- package/dist/stream-broker/_stub.js +2 -2
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-vNfS65In.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-EYRUYv_r.mjs} +2 -2
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BnP7C_HO.mjs +26 -0
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CR0--kRv.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-Ciacp783.mjs → hostInit-iGdBpvGc.mjs} +2 -2
- package/dist/stream-broker/index.js +4 -4
- package/dist/stream-broker/index.mjs +4 -4
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DfeHvW4k.mjs +0 -26
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BpXPNINd.mjs +0 -26
|
@@ -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_default_detection_model = require("../default-detection-model-
|
|
6
|
+
const require_dist = require("../dist-CMeICL07.js");
|
|
7
|
+
const require_node = require("../node-X_0Tka7-.js");
|
|
8
|
+
const require_default_detection_model = require("../default-detection-model-B6gKGnfx.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-o4LFWbBN.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");
|
|
@@ -759,7 +759,7 @@ var POOL_MODEL_LOAD_BOUNDS = {
|
|
|
759
759
|
hardMs: 6e5,
|
|
760
760
|
why: "A cold iGPU compile of the WHOLE model set measured ~25 s on the N100; one model is 1-3 s (YuNet 1.4 s on a fresh worker, 2026-09-26). 120 s is ~5x the worst measured set. No evidence of a legitimate compile past it; the hard bound gives one 5x more before the worker is recycled.",
|
|
761
761
|
gilMayBeHeldDuringCompile: false,
|
|
762
|
-
gilWhy: "The OpenVINO Python binding is believed to release the GIL around compile_model (gil_scoped_release). Not measured on
|
|
762
|
+
gilWhy: "The OpenVINO Python binding is believed to release the GIL around compile_model (gil_scoped_release). Not yet measured on this node."
|
|
763
763
|
},
|
|
764
764
|
coreml: {
|
|
765
765
|
softMs: 3e5,
|
|
@@ -5783,6 +5783,26 @@ var PLATE_OCR_CROP_POLICIES = {
|
|
|
5783
5783
|
}
|
|
5784
5784
|
};
|
|
5785
5785
|
/**
|
|
5786
|
+
* The margin around a plate box drawn by the ROOT model (D730) — a Frigate+
|
|
5787
|
+
* `license_plate` read in place of `plate-detection`'s own box.
|
|
5788
|
+
*
|
|
5789
|
+
* The margin is a property of the box's detector (see above), and this
|
|
5790
|
+
* detector's boxes have never been measured against the plate readers: 0.15 is
|
|
5791
|
+
* the value that served a TIGHT detector box (the deleted `yolov8n-plate`,
|
|
5792
|
+
* 7/7 Kia reads at 0.13–0.16), on the assumption that Frigate+ boxes are
|
|
5793
|
+
* tight as well. It is uncalibrated and needs measuring on a ground-truth set
|
|
5794
|
+
* of root-supplied plates before it is trusted; until then it applies to every
|
|
5795
|
+
* reader alike, replacing the reader's own detector-specific margin.
|
|
5796
|
+
*/
|
|
5797
|
+
var ROOT_SUPPLIED_PLATE_MARGIN_FRACTION = .15;
|
|
5798
|
+
/**
|
|
5799
|
+
* The margin a reader cuts around its plate box: the reader's own, unless the
|
|
5800
|
+
* box was drawn by the root model.
|
|
5801
|
+
*/
|
|
5802
|
+
function plateOcrMarginFraction(policy, boxFromRoot) {
|
|
5803
|
+
return boxFromRoot ? ROOT_SUPPLIED_PLATE_MARGIN_FRACTION : policy.marginFraction;
|
|
5804
|
+
}
|
|
5805
|
+
/**
|
|
5786
5806
|
* The crop policy for a step child, or `null` when the child is not a plate
|
|
5787
5807
|
* reader at all (a face embedder, a classifier — nothing here applies to them).
|
|
5788
5808
|
*/
|
|
@@ -5812,6 +5832,79 @@ function expandBbox(bbox, marginFraction, imageWidth, imageHeight) {
|
|
|
5812
5832
|
];
|
|
5813
5833
|
}
|
|
5814
5834
|
//#endregion
|
|
5835
|
+
//#region src/detection-pipeline/pipeline/root-child-boxes.ts
|
|
5836
|
+
/**
|
|
5837
|
+
* Root child boxes (D730) — a root model's `license_plate` / `face` box made
|
|
5838
|
+
* into a DETAIL of the vehicle / person that contains it.
|
|
5839
|
+
*
|
|
5840
|
+
* The labels are deliberately absent from the root's classMap, so they never
|
|
5841
|
+
* make a first-level detection and therefore never a track (D683). When the
|
|
5842
|
+
* root declares a CROP supply for them, the executor keeps the boxes aside
|
|
5843
|
+
* instead of discarding them, and once the frame's first-level detections are
|
|
5844
|
+
* final this attaches each to its containing parent (`containingParentIndex`).
|
|
5845
|
+
* Whether the camera USES them is the runner's decision
|
|
5846
|
+
* (`pipeline-runner/root-supply.ts`); a box nothing contains is discarded.
|
|
5847
|
+
*
|
|
5848
|
+
* Pure.
|
|
5849
|
+
*/
|
|
5850
|
+
/** The crop supply a raw root class belongs to, if the root declares one. */
|
|
5851
|
+
function cropSupplyForLabel(supplies, rawClass) {
|
|
5852
|
+
for (const supply of supplies ?? []) if (supply.kind === "crop" && supply.rootLabels.includes(rawClass)) return supply;
|
|
5853
|
+
}
|
|
5854
|
+
function toBox(b) {
|
|
5855
|
+
return {
|
|
5856
|
+
x: b[0],
|
|
5857
|
+
y: b[1],
|
|
5858
|
+
w: b[2] - b[0],
|
|
5859
|
+
h: b[3] - b[1]
|
|
5860
|
+
};
|
|
5861
|
+
}
|
|
5862
|
+
/**
|
|
5863
|
+
* Attach each candidate to the smallest first-level parent of its supply's
|
|
5864
|
+
* macro that contains it. Never mutates the parents.
|
|
5865
|
+
*/
|
|
5866
|
+
function attachRootChildBoxes(candidates, parents, modelId, idGen) {
|
|
5867
|
+
const details = [];
|
|
5868
|
+
const uncontained = [];
|
|
5869
|
+
for (const candidate of candidates) {
|
|
5870
|
+
const eligible = parents.filter((p) => p.kind === "first-level" && p.macroClass === candidate.supply.parentMacro);
|
|
5871
|
+
const index = require_dist.containingParentIndex(toBox(candidate.bbox), eligible.map((p) => toBox(p.bbox)));
|
|
5872
|
+
const parent = index >= 0 ? eligible[index] : void 0;
|
|
5873
|
+
if (parent === void 0) {
|
|
5874
|
+
uncontained.push(candidate);
|
|
5875
|
+
continue;
|
|
5876
|
+
}
|
|
5877
|
+
const stepId = candidate.supply.stepId;
|
|
5878
|
+
details.push({
|
|
5879
|
+
id: idGen.next(),
|
|
5880
|
+
kind: "detail",
|
|
5881
|
+
macroClass: candidate.supply.childClass,
|
|
5882
|
+
originalClass: candidate.rawClass,
|
|
5883
|
+
score: candidate.score,
|
|
5884
|
+
bbox: [
|
|
5885
|
+
candidate.bbox[0],
|
|
5886
|
+
candidate.bbox[1],
|
|
5887
|
+
candidate.bbox[2],
|
|
5888
|
+
candidate.bbox[3]
|
|
5889
|
+
],
|
|
5890
|
+
parentId: parent.id,
|
|
5891
|
+
rootSupplied: {
|
|
5892
|
+
stepId,
|
|
5893
|
+
modelId
|
|
5894
|
+
},
|
|
5895
|
+
ownLabels: [],
|
|
5896
|
+
alternateLabels: {},
|
|
5897
|
+
stepLatencyMs: {},
|
|
5898
|
+
modelIds: { [stepId]: modelId },
|
|
5899
|
+
extractMode: "full-frame"
|
|
5900
|
+
});
|
|
5901
|
+
}
|
|
5902
|
+
return {
|
|
5903
|
+
details,
|
|
5904
|
+
uncontained
|
|
5905
|
+
};
|
|
5906
|
+
}
|
|
5907
|
+
//#endregion
|
|
5815
5908
|
//#region src/detection-pipeline/pipeline/plate-warp.ts
|
|
5816
5909
|
/**
|
|
5817
5910
|
* Plate-crop WARP — perspective rectification of a licence-plate ROI to a
|
|
@@ -6368,6 +6461,7 @@ function buildFrameResult(input) {
|
|
|
6368
6461
|
} : {},
|
|
6369
6462
|
labels,
|
|
6370
6463
|
...m.parentId !== void 0 ? { parentId: m.parentId } : {},
|
|
6464
|
+
...m.rootSupplied !== void 0 ? { rootSupplied: m.rootSupplied } : {},
|
|
6371
6465
|
...embedding !== void 0 ? {
|
|
6372
6466
|
embedding,
|
|
6373
6467
|
...embeddingModelId !== void 0 ? { embeddingModelId } : {}
|
|
@@ -6469,33 +6563,35 @@ function toMutableRootDetection(det, rootStep, idGen, rootStepLatencyMs) {
|
|
|
6469
6563
|
//#endregion
|
|
6470
6564
|
//#region src/detection-pipeline/pipeline/linked-label.ts
|
|
6471
6565
|
/**
|
|
6472
|
-
* The detector's linked label (D715): when the model that RAN declares
|
|
6473
|
-
*
|
|
6474
|
-
* the effect as a `ScoredLabel` attributed to `detector-link:<stepId>`
|
|
6475
|
-
* the step's own vocabulary and tier, so tier 1 means one thing whichever
|
|
6566
|
+
* The detector's linked label (D715, D730): when the model that RAN declares a
|
|
6567
|
+
* LABEL supply for a step, a detection whose raw class names that step's effect
|
|
6568
|
+
* carries the effect as a `ScoredLabel` attributed to `detector-link:<stepId>`
|
|
6569
|
+
* — in the step's own vocabulary and tier, so tier 1 means one thing whichever
|
|
6476
6570
|
* writer produced it.
|
|
6477
6571
|
*
|
|
6478
6572
|
* Written at score 0 here, always: the executor cannot see the camera's whole
|
|
6479
6573
|
* step tree (a detail step placed on another pool is pruned from the dispatch),
|
|
6480
|
-
* so it cannot know
|
|
6481
|
-
*
|
|
6482
|
-
*
|
|
6483
|
-
*
|
|
6574
|
+
* so it cannot know whether the camera USES the supply. The runner, which holds
|
|
6575
|
+
* the attach config, decides with `resolveRootSupply` (`pipeline-runner/root-supply.ts`):
|
|
6576
|
+
* effective ⇒ the label is raised to the detection's score, or dropped when the
|
|
6577
|
+
* step's class list switched it off; otherwise it stays the score-0 fallback
|
|
6578
|
+
* any scored answer of the step outranks.
|
|
6484
6579
|
*/
|
|
6485
6580
|
/** The linked labels one mapped root detection carries. Pure. */
|
|
6486
|
-
function linkedLabelsFor(
|
|
6487
|
-
if (
|
|
6581
|
+
function linkedLabelsFor(supplies, rawClass, macroClass, modelId) {
|
|
6582
|
+
if (supplies === void 0 || supplies.length === 0) return [];
|
|
6488
6583
|
const out = [];
|
|
6489
|
-
for (const
|
|
6490
|
-
if (
|
|
6491
|
-
|
|
6584
|
+
for (const supply of supplies) {
|
|
6585
|
+
if (supply.kind !== "label") continue;
|
|
6586
|
+
if (require_dist.LABEL_SUPPLY_MACRO[supply.stepId] !== macroClass) continue;
|
|
6587
|
+
const effect = supply.labelToEffect[rawClass];
|
|
6492
6588
|
if (effect === void 0 || effect === macroClass) continue;
|
|
6493
|
-
const tier = require_default_detection_model.getStepDefinition(
|
|
6589
|
+
const tier = require_default_detection_model.getStepDefinition(supply.stepId).labelTier;
|
|
6494
6590
|
out.push({
|
|
6495
6591
|
label: effect,
|
|
6496
6592
|
score: 0,
|
|
6497
6593
|
...tier !== void 0 ? { tier } : {},
|
|
6498
|
-
stepId: require_dist.linkedLabelStepId(
|
|
6594
|
+
stepId: require_dist.linkedLabelStepId(supply.stepId),
|
|
6499
6595
|
modelId
|
|
6500
6596
|
});
|
|
6501
6597
|
}
|
|
@@ -6724,10 +6820,19 @@ var PipelineExecutor = class {
|
|
|
6724
6820
|
const rootView = rootInputViewProvider ? await rootInputViewProvider(rootStep, rootCrop) : null;
|
|
6725
6821
|
const cropPrep = !rootView && rootCrop !== void 0 ? await this.prepareCropZoneInput(rootCrop, fullFrameJpegProvider, imageWidth, imageHeight, deviceId) : null;
|
|
6726
6822
|
const rootStart = Date.now();
|
|
6727
|
-
const
|
|
6823
|
+
const supplied = runOpts?.suppliedRoot?.stepId === rootStep.stepId ? runOpts.suppliedRoot : void 0;
|
|
6824
|
+
const rawRootOutput = supplied ? {
|
|
6825
|
+
kind: "detections",
|
|
6826
|
+
detections: supplied.detections.map((d) => ({
|
|
6827
|
+
class: rootStep.definition.outputClasses[0] ?? rootStep.stepId,
|
|
6828
|
+
score: d.score,
|
|
6829
|
+
bbox: d.bbox,
|
|
6830
|
+
...d.landmarks !== void 0 ? { landmarks: d.landmarks } : {}
|
|
6831
|
+
}))
|
|
6832
|
+
} : await this.executeStep(rootStep, rootView?.input ?? cropPrep?.input ?? withInferenceDeviceId(rootInput, deviceId), rootView?.width ?? cropPrep?.width ?? imageWidth, rootView?.height ?? cropPrep?.height ?? imageHeight, "full-frame", void 0, void 0, traceBuilder, stepTimings, poolAgg, rootShed);
|
|
6728
6833
|
const rootMs = Date.now() - rootStart;
|
|
6729
6834
|
if (rawRootOutput === null) continue;
|
|
6730
|
-
const rootOutput = rootView && rawRootOutput.kind === "detections" ? reprojectViewDetections(rawRootOutput, rootView.geometry) : cropPrep && rawRootOutput.kind === "detections" ? reprojectCropZoneDetections(rawRootOutput, cropPrep.origin) : rawRootOutput;
|
|
6835
|
+
const rootOutput = supplied ? rawRootOutput : rootView && rawRootOutput.kind === "detections" ? reprojectViewDetections(rawRootOutput, rootView.geometry) : cropPrep && rawRootOutput.kind === "detections" ? reprojectCropZoneDetections(rawRootOutput, cropPrep.origin) : rawRootOutput;
|
|
6731
6836
|
if (rootOutput.kind !== "detections") {
|
|
6732
6837
|
if (isEnrichmentOutput(rootOutput)) {
|
|
6733
6838
|
const mutable = this.synthesizeRootDetection(rootOutput, rootStep, idGen, rootMs, imageWidth, imageHeight);
|
|
@@ -6749,8 +6854,33 @@ var PipelineExecutor = class {
|
|
|
6749
6854
|
}
|
|
6750
6855
|
continue;
|
|
6751
6856
|
}
|
|
6857
|
+
const rootChildCandidates = [];
|
|
6858
|
+
const firstLevelStart = firstLevel.length;
|
|
6752
6859
|
for (const det of rootOutput.detections) {
|
|
6753
|
-
const
|
|
6860
|
+
const cropSupply = cropSupplyForLabel(rootStep.rootSupplies, det.class);
|
|
6861
|
+
if (cropSupply !== void 0) {
|
|
6862
|
+
rootChildCandidates.push({
|
|
6863
|
+
rawClass: det.class,
|
|
6864
|
+
score: det.score,
|
|
6865
|
+
bbox: [
|
|
6866
|
+
det.bbox[0],
|
|
6867
|
+
det.bbox[1],
|
|
6868
|
+
det.bbox[2],
|
|
6869
|
+
det.bbox[3]
|
|
6870
|
+
],
|
|
6871
|
+
supply: cropSupply
|
|
6872
|
+
});
|
|
6873
|
+
continue;
|
|
6874
|
+
}
|
|
6875
|
+
const seeded = toMutableRootDetection(det, rootStep, idGen, rootMs);
|
|
6876
|
+
const mutable = supplied ? {
|
|
6877
|
+
...seeded,
|
|
6878
|
+
rootSupplied: {
|
|
6879
|
+
stepId: rootStep.stepId,
|
|
6880
|
+
modelId: supplied.modelId
|
|
6881
|
+
},
|
|
6882
|
+
modelIds: { [rootStep.stepId]: supplied.modelId }
|
|
6883
|
+
} : seeded;
|
|
6754
6884
|
if (rootStep.effectiveClassMap) {
|
|
6755
6885
|
const mapped = rootStep.effectiveClassMap.mapping[det.class];
|
|
6756
6886
|
if (mapped) {
|
|
@@ -6771,7 +6901,7 @@ var PipelineExecutor = class {
|
|
|
6771
6901
|
continue;
|
|
6772
6902
|
}
|
|
6773
6903
|
}
|
|
6774
|
-
for (const linked of linkedLabelsFor(rootStep.
|
|
6904
|
+
for (const linked of linkedLabelsFor(rootStep.rootSupplies, det.class, mutable.macroClass, rootStep.modelId)) mutable.ownLabels.push(linked);
|
|
6775
6905
|
const filterVerdict = this.macroFilterVerdict(mutable.macroClass, mutable.score, rootStep.settings);
|
|
6776
6906
|
if (filterVerdict !== "pass") {
|
|
6777
6907
|
(discarded ??= []).push({
|
|
@@ -6853,6 +6983,21 @@ var PipelineExecutor = class {
|
|
|
6853
6983
|
}
|
|
6854
6984
|
firstLevel.push(mutable);
|
|
6855
6985
|
}
|
|
6986
|
+
if (rootChildCandidates.length > 0) {
|
|
6987
|
+
const attached = attachRootChildBoxes(rootChildCandidates, firstLevel.slice(firstLevelStart), rootStep.modelId, idGen);
|
|
6988
|
+
details.push(...attached.details);
|
|
6989
|
+
for (const c of attached.uncontained) (discarded ??= []).push({
|
|
6990
|
+
bbox: [
|
|
6991
|
+
c.bbox[0],
|
|
6992
|
+
c.bbox[1],
|
|
6993
|
+
c.bbox[2],
|
|
6994
|
+
c.bbox[3]
|
|
6995
|
+
],
|
|
6996
|
+
macroClass: c.supply.childClass,
|
|
6997
|
+
score: c.score,
|
|
6998
|
+
reason: "class-filter"
|
|
6999
|
+
});
|
|
7000
|
+
}
|
|
6856
7001
|
}
|
|
6857
7002
|
const totalMs = Date.now() - startMs;
|
|
6858
7003
|
return {
|
|
@@ -7120,7 +7265,8 @@ var PipelineExecutor = class {
|
|
|
7120
7265
|
}
|
|
7121
7266
|
} else {
|
|
7122
7267
|
const cropPolicy = resolvePlateOcrCropPolicy(resolveEffectivePostprocessor(child.definition, child.modelId));
|
|
7123
|
-
const
|
|
7268
|
+
const marginFraction = cropPolicy ? plateOcrMarginFraction(cropPolicy, parentDetection.rootSupplied !== void 0) : 0;
|
|
7269
|
+
const cropBbox = cropPolicy ? expandBbox(parentDetection.bbox, marginFraction, imageWidth, imageHeight) : parentDetection.bbox;
|
|
7124
7270
|
const nativeChild = nativeCropProvider && child.children.length === 0 ? await nativeChildCrop(nativeCropProvider, cropBbox, imageWidth, imageHeight, NATIVE_CHILD_CROP_MAX_WIDTH) : null;
|
|
7125
7271
|
if (nativeChild) {
|
|
7126
7272
|
cropJpegBuf = nativeChild.jpeg;
|
|
@@ -7143,7 +7289,8 @@ var PipelineExecutor = class {
|
|
|
7143
7289
|
plateLongSidePx: Math.round(plateLongSidePx),
|
|
7144
7290
|
plateShortSidePx: Math.round(Math.min(cropW, cropH)),
|
|
7145
7291
|
minPlateLongSidePx: cropPolicy.minLongSidePx,
|
|
7146
|
-
marginFraction
|
|
7292
|
+
marginFraction,
|
|
7293
|
+
boxFrom: parentDetection.rootSupplied !== void 0 ? "root-model" : "step",
|
|
7147
7294
|
source: nativeChild ? "native" : "detection-tile"
|
|
7148
7295
|
}
|
|
7149
7296
|
});
|
|
@@ -7341,9 +7488,18 @@ function buildNode(step, getEngine, resolveModel, onMissingVariant, resolved) {
|
|
|
7341
7488
|
children,
|
|
7342
7489
|
...Object.keys(mergedSettings).length > 0 ? { settings: mergedSettings } : {},
|
|
7343
7490
|
...effectiveClassMap !== void 0 ? { effectiveClassMap } : {},
|
|
7344
|
-
...
|
|
7491
|
+
...rootSuppliesField(definition, modelEntry)
|
|
7345
7492
|
};
|
|
7346
7493
|
}
|
|
7494
|
+
/** A root step's supplies, omitted when it declares none (and for every child step). */
|
|
7495
|
+
function rootSuppliesField(definition, modelEntry) {
|
|
7496
|
+
if (definition.inputClasses !== null) return {};
|
|
7497
|
+
const supplies = require_dist.rootSuppliesOf(modelEntry, {
|
|
7498
|
+
labels: definition.labels ?? [],
|
|
7499
|
+
...definition.classMap !== void 0 ? { classMap: definition.classMap } : {}
|
|
7500
|
+
});
|
|
7501
|
+
return supplies.length > 0 ? { rootSupplies: supplies } : {};
|
|
7502
|
+
}
|
|
7347
7503
|
/**
|
|
7348
7504
|
* Walk the step's declared `getConfigSchema()` and collect every field
|
|
7349
7505
|
* with a primitive `default` value into a plain record. Group fields
|
|
@@ -9489,7 +9645,8 @@ var DetectionPipelineProvider = class DetectionPipelineProvider {
|
|
|
9489
9645
|
execution = await executor.run(effectiveTree, rootInput, jpegProvider, imageWidth, imageHeight, effectiveDeviceId, {
|
|
9490
9646
|
traceVerbosity: isRuntime ? this.eventBus ? "summary" : "off" : "full",
|
|
9491
9647
|
plane: input.plane,
|
|
9492
|
-
occasion: input.replay === true ? "replay" : "live"
|
|
9648
|
+
occasion: input.replay === true ? "replay" : "live",
|
|
9649
|
+
...input.suppliedRoot !== void 0 ? { suppliedRoot: input.suppliedRoot } : {}
|
|
9493
9650
|
}, nativeCropProvider, cropZoneBbox, rootInputViewProvider);
|
|
9494
9651
|
executionSucceeded = true;
|
|
9495
9652
|
} finally {
|
|
@@ -11050,7 +11207,7 @@ function buildSchemaSlots(formats, modelsDir, customByStep) {
|
|
|
11050
11207
|
...m.legacy !== void 0 ? { legacy: m.legacy } : {},
|
|
11051
11208
|
provider: m.provider ?? "camstack",
|
|
11052
11209
|
defaultConfidence: require_default_detection_model.resolveModelDefaultConfidence(step, m),
|
|
11053
|
-
...
|
|
11210
|
+
...modelSuppliesField(step, m)
|
|
11054
11211
|
})),
|
|
11055
11212
|
defaultModelId: step.defaultModelId,
|
|
11056
11213
|
...step.defaultModelIdByFormat ? { defaultModelIdByFormat: { ...step.defaultModelIdByFormat } } : {},
|
|
@@ -11186,6 +11343,15 @@ function isDetailPlaneStep(addonId) {
|
|
|
11186
11343
|
return false;
|
|
11187
11344
|
}
|
|
11188
11345
|
}
|
|
11346
|
+
/** A root model's supplies for the schema, omitted when it supplies nothing. */
|
|
11347
|
+
function modelSuppliesField(step, model) {
|
|
11348
|
+
if (step.inputClasses !== null) return {};
|
|
11349
|
+
const supplies = require_dist.rootSuppliesOf(model, {
|
|
11350
|
+
labels: step.labels ?? [],
|
|
11351
|
+
...step.classMap !== void 0 ? { classMap: step.classMap } : {}
|
|
11352
|
+
});
|
|
11353
|
+
return supplies.length > 0 ? { suppliesSteps: supplies } : {};
|
|
11354
|
+
}
|
|
11189
11355
|
/**
|
|
11190
11356
|
* What a dispatch runs after its per-step loads (D657).
|
|
11191
11357
|
*
|
|
@@ -11434,7 +11600,7 @@ var DetectionPipelineAddon = class extends require_dist.BaseAddon {
|
|
|
11434
11600
|
type: "select",
|
|
11435
11601
|
key: "batchMode",
|
|
11436
11602
|
label: "Batch dispatch mode",
|
|
11437
|
-
description: "How the Python pool GROUPS predict requests — it never changes a model's compiled batch SHAPE, which is derived from (engine, device) at load and is not configurable
|
|
11603
|
+
description: "How the Python pool GROUPS predict requests — it never changes a model's compiled batch SHAPE, which is derived from (engine, device) at load and is not configurable. `none` = one call per frame. `window` = per-model accumulator coalesces concurrent calls within Window (ms). Auto uses the matrix-sweep default for the current backend. Applies to THIS node only.",
|
|
11438
11604
|
options: [
|
|
11439
11605
|
{
|
|
11440
11606
|
value: "",
|
|
@@ -11478,7 +11644,7 @@ var DetectionPipelineAddon = class extends require_dist.BaseAddon {
|
|
|
11478
11644
|
type: "slider",
|
|
11479
11645
|
key: "maxBatchSize",
|
|
11480
11646
|
label: "Max batch size",
|
|
11481
|
-
description: "Cap on how many requests are GROUPED into one batched predict call. Not the model's compiled batch shape — that is derived from (engine, device) at load and is not configurable
|
|
11647
|
+
description: "Cap on how many requests are GROUPED into one batched predict call. Not the model's compiled batch shape — that is derived from (engine, device) at load and is not configurable; a stacked tensor is only ever built for an export that declares a flexible batch axis itself. Auto = backend default. Applies to THIS node only.",
|
|
11482
11648
|
min: 1,
|
|
11483
11649
|
max: 16,
|
|
11484
11650
|
step: 1,
|