@camstack/addon-post-analysis 1.1.28 → 1.1.29

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.
@@ -4657,7 +4657,7 @@ function _instanceof(cls, params = {}) {
4657
4657
  return inst;
4658
4658
  }
4659
4659
  //#endregion
4660
- //#region ../types/dist/sleep-DkhOVOjW.mjs
4660
+ //#region ../types/dist/sleep-_sv7WKkq.mjs
4661
4661
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4662
4662
  EventCategory["SystemBoot"] = "system.boot";
4663
4663
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -5088,6 +5088,14 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
5088
5088
  EventCategory["PipelineAnalyticsDetectionEvent"] = "pipeline-analytics.detection-event";
5089
5089
  EventCategory["PipelineAnalyticsFrameTracked"] = "pipeline-analytics.frame-tracked";
5090
5090
  /**
5091
+ * Fired by `addon-post-analysis` when a parked (stationary) object appears
5092
+ * (a track was promoted to a stationary-registry entry) or departs (the
5093
+ * object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
5094
+ * the dedicated "Stationary" section — never the live event feed. Payload:
5095
+ * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
5096
+ */
5097
+ EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
5098
+ /**
5091
5099
  * Fired by `addon-post-analysis` whenever a gallery face row changes:
5092
5100
  * `kind:'buffered'` a new detected face was persisted, `'assigned'` /
5093
5101
  * `'unassigned'` its identity link changed, `'deleted'` the row was
@@ -7031,6 +7039,15 @@ var ModelCatalogEntrySchema = object({
7031
7039
  width: number(),
7032
7040
  height: number()
7033
7041
  }),
7042
+ /**
7043
+ * Channel count of the model input tensor. Omit ⇒ 3 (RGB), the default for
7044
+ * every detector / classifier / embedder. Set to 1 for a grayscale CTC text
7045
+ * recognizer (EasyOCR VGG plate-OCR: input `[N,1,H,W]`) so the preprocess
7046
+ * feeds a single-channel, EasyOCR-normalized tensor instead of the default
7047
+ * 3-channel RGB one. Threaded through `PoolModelConfig.inputChannels` to the
7048
+ * Python inference pool.
7049
+ */
7050
+ inputChannels: number().int().positive().optional(),
7034
7051
  labels: array(LabelDefinitionSchema).readonly(),
7035
7052
  inputLayout: _enum(["nchw", "nhwc"]).optional(),
7036
7053
  inputNormalization: _enum([
@@ -7040,6 +7057,16 @@ var ModelCatalogEntrySchema = object({
7040
7057
  ]).optional(),
7041
7058
  preprocessMode: _enum(["letterbox", "resize"]).optional(),
7042
7059
  /**
7060
+ * Per-MODEL postprocessor override. Absent ⇒ the step's own
7061
+ * `StepDefinition.postprocessor` applies (the normal case — every model in a
7062
+ * step shares its decode). Set it when a step hosts models with DIFFERENT raw
7063
+ * output layouts under one slot: e.g. object-detection is `'yolo'` by default,
7064
+ * but a Coral SSD MobileNet build emits the `TFLite_Detection_PostProcess`
7065
+ * 4-tensor layout and needs `'ssd'`. Threaded into `PoolModelConfig.postprocessor`
7066
+ * by the engine factory (`modelEntry.postprocessor ?? def.postprocessor`).
7067
+ */
7068
+ postprocessor: custom().optional(),
7069
+ /**
7043
7070
  * When true, the executor produces a landmark-aligned crop (similarity warp
7044
7071
  * onto the canonical template) before this step runs, instead of a plain
7045
7072
  * axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
@@ -10675,7 +10702,8 @@ var EngineProvisioningSchema = object({
10675
10702
  runtimeId: _enum([
10676
10703
  "onnx",
10677
10704
  "openvino",
10678
- "coreml"
10705
+ "coreml",
10706
+ "edgetpu"
10679
10707
  ]).nullable(),
10680
10708
  device: string().nullable(),
10681
10709
  state: _enum([
@@ -12428,6 +12456,36 @@ var ZoneScopeBreakdownSchema = PerScopeBreakdownSchema.extend({
12428
12456
  * with the per-track detail panel and live overlay. */
12429
12457
  trackIds: array(string()).readonly()
12430
12458
  });
12459
+ /**
12460
+ * A parked ("stationary") object surfaced alongside occupancy — an object that
12461
+ * settled and stopped moving. It is NO LONGER a tracked object (the tracker was
12462
+ * told to forget it so it stops re-spawning tracks/events), but it IS still
12463
+ * physically present, so it keeps counting toward `frame` occupancy and is
12464
+ * listed here so the UI can show it in a dedicated "Stationary" section instead
12465
+ * of flooding the live event feed.
12466
+ */
12467
+ var StationaryObjectSchema = object({
12468
+ id: string(),
12469
+ className: string(),
12470
+ bbox: object({
12471
+ x: number(),
12472
+ y: number(),
12473
+ w: number(),
12474
+ h: number()
12475
+ }),
12476
+ frameWidth: number().int().nonnegative(),
12477
+ frameHeight: number().int().nonnegative(),
12478
+ /** When the source track was first seen. */
12479
+ firstSeenAt: number().int(),
12480
+ /** When the object was recognised as parked (promotion time). */
12481
+ becameStationaryAt: number().int(),
12482
+ /** Last frame a detection confirmed the object is still there. */
12483
+ lastConfirmedAt: number().int(),
12484
+ /** Enrichment label carried from the source track (identity / plate). */
12485
+ label: string().optional(),
12486
+ /** Native-resolution key-frame media key for the parked object's best image. */
12487
+ keyFrameMediaKey: string().optional()
12488
+ });
12431
12489
  var CameraOccupancySnapshotSchema = object({
12432
12490
  /** Frame timestamp of the inference result that produced this snapshot. */
12433
12491
  ts: number().int(),
@@ -12436,10 +12494,15 @@ var CameraOccupancySnapshotSchema = object({
12436
12494
  frameHeight: number().int().nonnegative(),
12437
12495
  /** Per-zone breakdown — one entry per defined zone (user + onboard). */
12438
12496
  zones: array(ZoneScopeBreakdownSchema).readonly(),
12439
- /** Frame-wide aggregate (everywhere, regardless of zone membership). */
12497
+ /** Frame-wide aggregate (everywhere, regardless of zone membership).
12498
+ * INCLUDES currently-confirmed stationary objects (they are still present). */
12440
12499
  frame: PerScopeBreakdownSchema,
12441
12500
  /** Detections that landed outside every zone. Empty when no zones defined. */
12442
- unzoned: PerScopeBreakdownSchema
12501
+ unzoned: PerScopeBreakdownSchema,
12502
+ /** Parked objects on this camera (additive — absent on legacy snapshots).
12503
+ * Surfaced separately so the UI shows them in a dedicated section rather
12504
+ * than as repeated tracks/events. */
12505
+ stationaryObjects: array(StationaryObjectSchema).readonly().optional()
12443
12506
  });
12444
12507
  /**
12445
12508
  * Time-series resolution. The history methods return one bucket per
@@ -15815,6 +15878,22 @@ var TrackSnapshotSchema = object({
15815
15878
  /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
15816
15879
  mediaKey: string()
15817
15880
  });
15881
+ /**
15882
+ * One audio-classification label heard on the track's camera while the
15883
+ * track was alive, aggregated per label. An "episode" is one persisted
15884
+ * audio event (the confident-classification path: score ≥ the device's
15885
+ * `classificationMinScore`, class-change-or-heartbeat coalesced) — NOT
15886
+ * one 32 ms inference chunk, so counts stay human-scaled.
15887
+ */
15888
+ var TrackAudioLabelSchema = object({
15889
+ label: string(),
15890
+ /** Highest classification score observed across the label's episodes. */
15891
+ peakScore: number(),
15892
+ /** Number of coalesced audio-event episodes carrying this label. */
15893
+ count: number(),
15894
+ firstAt: number(),
15895
+ lastAt: number()
15896
+ });
15818
15897
  var TrackSchema = object({
15819
15898
  trackId: string(),
15820
15899
  deviceId: number(),
@@ -15846,7 +15925,11 @@ var TrackSchema = object({
15846
15925
  bestEventId: string().optional(),
15847
15926
  /** Tag of the importance sub-signal that dominated the score
15848
15927
  * (identity|dwell|proximity|class|confidence|travel|zone). */
15849
- importanceReason: string().optional()
15928
+ importanceReason: string().optional(),
15929
+ /** Audio-classification labels heard on the camera during the track's
15930
+ * life (score ≥ device `classificationMinScore`), aggregated per label.
15931
+ * Absent on legacy rows / tracks with no confident audio. */
15932
+ audioLabels: array(TrackAudioLabelSchema).readonly().optional()
15850
15933
  });
15851
15934
  var BaseEventFields = {
15852
15935
  id: string(),
@@ -19239,6 +19322,10 @@ var GpuInfoSchema = object({
19239
19322
  memoryMB: number().optional()
19240
19323
  });
19241
19324
  var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
19325
+ var CoralInfoSchema = object({
19326
+ type: literal("coral-edgetpu"),
19327
+ bus: string().optional()
19328
+ });
19242
19329
  var HardwareInfoSchema = object({
19243
19330
  platform: HardwarePlatformSchema,
19244
19331
  arch: HardwareArchSchema,
@@ -19247,7 +19334,8 @@ var HardwareInfoSchema = object({
19247
19334
  totalRAM_MB: number(),
19248
19335
  availableRAM_MB: number(),
19249
19336
  gpu: GpuInfoSchema.nullable(),
19250
- npu: NpuInfoSchema.nullable()
19337
+ npu: NpuInfoSchema.nullable(),
19338
+ coral: CoralInfoSchema.nullable().optional()
19251
19339
  });
19252
19340
  var PlatformScoreSchema = object({
19253
19341
  runtime: _enum(["node", "python"]),
@@ -4635,7 +4635,7 @@ function _instanceof(cls, params = {}) {
4635
4635
  return inst;
4636
4636
  }
4637
4637
  //#endregion
4638
- //#region ../types/dist/sleep-DkhOVOjW.mjs
4638
+ //#region ../types/dist/sleep-_sv7WKkq.mjs
4639
4639
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4640
4640
  EventCategory["SystemBoot"] = "system.boot";
4641
4641
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -5066,6 +5066,14 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
5066
5066
  EventCategory["PipelineAnalyticsDetectionEvent"] = "pipeline-analytics.detection-event";
5067
5067
  EventCategory["PipelineAnalyticsFrameTracked"] = "pipeline-analytics.frame-tracked";
5068
5068
  /**
5069
+ * Fired by `addon-post-analysis` when a parked (stationary) object appears
5070
+ * (a track was promoted to a stationary-registry entry) or departs (the
5071
+ * object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
5072
+ * the dedicated "Stationary" section — never the live event feed. Payload:
5073
+ * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
5074
+ */
5075
+ EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
5076
+ /**
5069
5077
  * Fired by `addon-post-analysis` whenever a gallery face row changes:
5070
5078
  * `kind:'buffered'` a new detected face was persisted, `'assigned'` /
5071
5079
  * `'unassigned'` its identity link changed, `'deleted'` the row was
@@ -7009,6 +7017,15 @@ var ModelCatalogEntrySchema = object({
7009
7017
  width: number(),
7010
7018
  height: number()
7011
7019
  }),
7020
+ /**
7021
+ * Channel count of the model input tensor. Omit ⇒ 3 (RGB), the default for
7022
+ * every detector / classifier / embedder. Set to 1 for a grayscale CTC text
7023
+ * recognizer (EasyOCR VGG plate-OCR: input `[N,1,H,W]`) so the preprocess
7024
+ * feeds a single-channel, EasyOCR-normalized tensor instead of the default
7025
+ * 3-channel RGB one. Threaded through `PoolModelConfig.inputChannels` to the
7026
+ * Python inference pool.
7027
+ */
7028
+ inputChannels: number().int().positive().optional(),
7012
7029
  labels: array(LabelDefinitionSchema).readonly(),
7013
7030
  inputLayout: _enum(["nchw", "nhwc"]).optional(),
7014
7031
  inputNormalization: _enum([
@@ -7018,6 +7035,16 @@ var ModelCatalogEntrySchema = object({
7018
7035
  ]).optional(),
7019
7036
  preprocessMode: _enum(["letterbox", "resize"]).optional(),
7020
7037
  /**
7038
+ * Per-MODEL postprocessor override. Absent ⇒ the step's own
7039
+ * `StepDefinition.postprocessor` applies (the normal case — every model in a
7040
+ * step shares its decode). Set it when a step hosts models with DIFFERENT raw
7041
+ * output layouts under one slot: e.g. object-detection is `'yolo'` by default,
7042
+ * but a Coral SSD MobileNet build emits the `TFLite_Detection_PostProcess`
7043
+ * 4-tensor layout and needs `'ssd'`. Threaded into `PoolModelConfig.postprocessor`
7044
+ * by the engine factory (`modelEntry.postprocessor ?? def.postprocessor`).
7045
+ */
7046
+ postprocessor: custom().optional(),
7047
+ /**
7021
7048
  * When true, the executor produces a landmark-aligned crop (similarity warp
7022
7049
  * onto the canonical template) before this step runs, instead of a plain
7023
7050
  * axis-aligned bbox crop. Required for face-recognition embedders (ArcFace):
@@ -10653,7 +10680,8 @@ var EngineProvisioningSchema = object({
10653
10680
  runtimeId: _enum([
10654
10681
  "onnx",
10655
10682
  "openvino",
10656
- "coreml"
10683
+ "coreml",
10684
+ "edgetpu"
10657
10685
  ]).nullable(),
10658
10686
  device: string().nullable(),
10659
10687
  state: _enum([
@@ -12406,6 +12434,36 @@ var ZoneScopeBreakdownSchema = PerScopeBreakdownSchema.extend({
12406
12434
  * with the per-track detail panel and live overlay. */
12407
12435
  trackIds: array(string()).readonly()
12408
12436
  });
12437
+ /**
12438
+ * A parked ("stationary") object surfaced alongside occupancy — an object that
12439
+ * settled and stopped moving. It is NO LONGER a tracked object (the tracker was
12440
+ * told to forget it so it stops re-spawning tracks/events), but it IS still
12441
+ * physically present, so it keeps counting toward `frame` occupancy and is
12442
+ * listed here so the UI can show it in a dedicated "Stationary" section instead
12443
+ * of flooding the live event feed.
12444
+ */
12445
+ var StationaryObjectSchema = object({
12446
+ id: string(),
12447
+ className: string(),
12448
+ bbox: object({
12449
+ x: number(),
12450
+ y: number(),
12451
+ w: number(),
12452
+ h: number()
12453
+ }),
12454
+ frameWidth: number().int().nonnegative(),
12455
+ frameHeight: number().int().nonnegative(),
12456
+ /** When the source track was first seen. */
12457
+ firstSeenAt: number().int(),
12458
+ /** When the object was recognised as parked (promotion time). */
12459
+ becameStationaryAt: number().int(),
12460
+ /** Last frame a detection confirmed the object is still there. */
12461
+ lastConfirmedAt: number().int(),
12462
+ /** Enrichment label carried from the source track (identity / plate). */
12463
+ label: string().optional(),
12464
+ /** Native-resolution key-frame media key for the parked object's best image. */
12465
+ keyFrameMediaKey: string().optional()
12466
+ });
12409
12467
  var CameraOccupancySnapshotSchema = object({
12410
12468
  /** Frame timestamp of the inference result that produced this snapshot. */
12411
12469
  ts: number().int(),
@@ -12414,10 +12472,15 @@ var CameraOccupancySnapshotSchema = object({
12414
12472
  frameHeight: number().int().nonnegative(),
12415
12473
  /** Per-zone breakdown — one entry per defined zone (user + onboard). */
12416
12474
  zones: array(ZoneScopeBreakdownSchema).readonly(),
12417
- /** Frame-wide aggregate (everywhere, regardless of zone membership). */
12475
+ /** Frame-wide aggregate (everywhere, regardless of zone membership).
12476
+ * INCLUDES currently-confirmed stationary objects (they are still present). */
12418
12477
  frame: PerScopeBreakdownSchema,
12419
12478
  /** Detections that landed outside every zone. Empty when no zones defined. */
12420
- unzoned: PerScopeBreakdownSchema
12479
+ unzoned: PerScopeBreakdownSchema,
12480
+ /** Parked objects on this camera (additive — absent on legacy snapshots).
12481
+ * Surfaced separately so the UI shows them in a dedicated section rather
12482
+ * than as repeated tracks/events. */
12483
+ stationaryObjects: array(StationaryObjectSchema).readonly().optional()
12421
12484
  });
12422
12485
  /**
12423
12486
  * Time-series resolution. The history methods return one bucket per
@@ -15793,6 +15856,22 @@ var TrackSnapshotSchema = object({
15793
15856
  /** MediaStore key; resolve via `getTrackMedia({ trackId })`. */
15794
15857
  mediaKey: string()
15795
15858
  });
15859
+ /**
15860
+ * One audio-classification label heard on the track's camera while the
15861
+ * track was alive, aggregated per label. An "episode" is one persisted
15862
+ * audio event (the confident-classification path: score ≥ the device's
15863
+ * `classificationMinScore`, class-change-or-heartbeat coalesced) — NOT
15864
+ * one 32 ms inference chunk, so counts stay human-scaled.
15865
+ */
15866
+ var TrackAudioLabelSchema = object({
15867
+ label: string(),
15868
+ /** Highest classification score observed across the label's episodes. */
15869
+ peakScore: number(),
15870
+ /** Number of coalesced audio-event episodes carrying this label. */
15871
+ count: number(),
15872
+ firstAt: number(),
15873
+ lastAt: number()
15874
+ });
15796
15875
  var TrackSchema = object({
15797
15876
  trackId: string(),
15798
15877
  deviceId: number(),
@@ -15824,7 +15903,11 @@ var TrackSchema = object({
15824
15903
  bestEventId: string().optional(),
15825
15904
  /** Tag of the importance sub-signal that dominated the score
15826
15905
  * (identity|dwell|proximity|class|confidence|travel|zone). */
15827
- importanceReason: string().optional()
15906
+ importanceReason: string().optional(),
15907
+ /** Audio-classification labels heard on the camera during the track's
15908
+ * life (score ≥ device `classificationMinScore`), aggregated per label.
15909
+ * Absent on legacy rows / tracks with no confident audio. */
15910
+ audioLabels: array(TrackAudioLabelSchema).readonly().optional()
15828
15911
  });
15829
15912
  var BaseEventFields = {
15830
15913
  id: string(),
@@ -19217,6 +19300,10 @@ var GpuInfoSchema = object({
19217
19300
  memoryMB: number().optional()
19218
19301
  });
19219
19302
  var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
19303
+ var CoralInfoSchema = object({
19304
+ type: literal("coral-edgetpu"),
19305
+ bus: string().optional()
19306
+ });
19220
19307
  var HardwareInfoSchema = object({
19221
19308
  platform: HardwarePlatformSchema,
19222
19309
  arch: HardwareArchSchema,
@@ -19225,7 +19312,8 @@ var HardwareInfoSchema = object({
19225
19312
  totalRAM_MB: number(),
19226
19313
  availableRAM_MB: number(),
19227
19314
  gpu: GpuInfoSchema.nullable(),
19228
- npu: NpuInfoSchema.nullable()
19315
+ npu: NpuInfoSchema.nullable(),
19316
+ coral: CoralInfoSchema.nullable().optional()
19229
19317
  });
19230
19318
  var PlatformScoreSchema = object({
19231
19319
  runtime: _enum(["node", "python"]),
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-Bnb58pyL.js");
5
+ const require_dist = require("../dist-AFLbpmAs.js");
6
6
  let node_fs = require("node:fs");
7
7
  let node_fs$1 = require_dist.__toESM(node_fs, 1);
8
8
  node_fs = require_dist.__toESM(node_fs);
@@ -758,7 +758,7 @@ var EmbeddingEncoderAddon = class extends require_dist.BaseAddon {
758
758
  }
759
759
  async onInitialize() {
760
760
  const modelsDir = await this.resolveModelsDir();
761
- this.models = new ModelDownloadService(modelsDir, []);
761
+ this.models = new ModelDownloadService(modelsDir, [...CLIP_IMAGE_MODELS, ...CLIP_TEXT_MODELS]);
762
762
  return [{
763
763
  capability: require_dist.embeddingEncoderCapability,
764
764
  provider: this
@@ -1,4 +1,4 @@
1
- import { a as embeddingEncoderCapability, m as BaseAddon, s as hfModelUrl } from "../dist-Blpsv-M0.mjs";
1
+ import { a as embeddingEncoderCapability, m as BaseAddon, s as hfModelUrl } from "../dist-CFjLqX2m.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import * as fs from "node:fs";
4
4
  import * as path$1 from "node:path";
@@ -753,7 +753,7 @@ var EmbeddingEncoderAddon = class extends BaseAddon {
753
753
  }
754
754
  async onInitialize() {
755
755
  const modelsDir = await this.resolveModelsDir();
756
- this.models = new ModelDownloadService(modelsDir, []);
756
+ this.models = new ModelDownloadService(modelsDir, [...CLIP_IMAGE_MODELS, ...CLIP_TEXT_MODELS]);
757
757
  return [{
758
758
  capability: embeddingEncoderCapability,
759
759
  provider: this
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-Bnb58pyL.js");
1
+ const require_dist = require("./dist-AFLbpmAs.js");
2
2
  let node_fs = require("node:fs");
3
3
  node_fs = require_dist.__toESM(node_fs, 1);
4
4
  let node_path = require("node:path");
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.1.44",
21
+ version: "1.1.45",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_pipeline_analytics_widgets",
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.1.44",
39
+ version: "1.1.45",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,