@camstack/addon-pipeline 1.1.68 → 1.1.69
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 +1 -1
- package/dist/audio-analyzer/index.mjs +1 -1
- package/dist/detection-pipeline/index.js +137 -27
- package/dist/detection-pipeline/index.mjs +137 -27
- package/dist/{dist-DkGHtAaK.mjs → dist-BT4Ug2Bf.mjs} +22 -2
- package/dist/{dist-BxxVKcnw.js → dist-DUcDVlg7.js} +22 -2
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/pipeline-runner/index.js +7 -3
- package/dist/pipeline-runner/index.mjs +7 -3
- package/dist/recorder/index.js +1 -1
- package/dist/recorder/index.mjs +1 -1
- package/dist/{step-definitions-CAs0RD2N.js → step-definitions-4tt-nRM4.js} +114 -187
- package/dist/{step-definitions-Delhq28w.mjs → step-definitions-DO0hIDMx.mjs} +114 -187
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BUXIIogo.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-CP4DpABx.mjs} +1 -1
- package/dist/stream-broker/{hostInit-D7_95hNV.mjs → hostInit-Do2ymS0O.mjs} +1 -1
- package/dist/stream-broker/index.js +1 -1
- package/dist/stream-broker/index.mjs +1 -1
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-CRvzj7Of.js → MaskShapeCanvas-DI4BY7W2-DlI3udxg.js} +1 -1
- package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-CBgvPUB-.js → MotionZonesSettings-NcxxQN8r-Du8J0kED.js} +1 -1
- package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-DH07fe1k.js → PrivacyMaskSettings-APgPLF7p-DSST47WI.js} +1 -1
- package/embed-dist/assets/{index-BkoPcGtQ.js → index-B2ux2xJ7.js} +4 -4
- package/embed-dist/index.html +1 -1
- package/package.json +1 -1
- package/python/inference_pool.py +13 -3
|
@@ -12187,8 +12187,18 @@ var pipelineExecutorCapability = {
|
|
|
12187
12187
|
* - `runtime` — main camera-serving engine (no idle TTL).
|
|
12188
12188
|
* - `warm-override` — benchmark/test override held in the warm
|
|
12189
12189
|
* cache; auto-disposed after the idle TTL.
|
|
12190
|
+
* - `device-pool` — a concurrent per-device pool (Phase 2
|
|
12191
|
+
* multi-device, keyed by `deviceKey`) resolved
|
|
12192
|
+
* via `resolveDeviceFactory`. Runs alongside the
|
|
12193
|
+
* `runtime` engine on a DIFFERENT accelerator
|
|
12194
|
+
* (NPU / iGPU / Coral) — this is how the
|
|
12195
|
+
* Engines tab shows all pools running at once.
|
|
12190
12196
|
*/
|
|
12191
|
-
kind: _enum([
|
|
12197
|
+
kind: _enum([
|
|
12198
|
+
"runtime",
|
|
12199
|
+
"warm-override",
|
|
12200
|
+
"device-pool"
|
|
12201
|
+
]),
|
|
12192
12202
|
/** Native pid of the underlying Python pool (null when no pool). */
|
|
12193
12203
|
poolPid: number().nullable(),
|
|
12194
12204
|
/** ms since this factory was last used (null when not warm-tracked). */
|
|
@@ -18036,7 +18046,17 @@ var AgentPipelineSettingsSchema = object({
|
|
|
18036
18046
|
* it already uses to reach the hub). Set this only when the auto-detected
|
|
18037
18047
|
* address is wrong (multi-homed host, NAT, custom interface).
|
|
18038
18048
|
*/
|
|
18039
|
-
reachableHost: string().optional()
|
|
18049
|
+
reachableHost: string().optional(),
|
|
18050
|
+
/**
|
|
18051
|
+
* Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
|
|
18052
|
+
* weight}. Absent / all-disabled ⇒ the node's single default accelerator
|
|
18053
|
+
* (safe default); two+ enabled ⇒ the dispatcher balances detection sessions
|
|
18054
|
+
* across them so they run CONCURRENTLY.
|
|
18055
|
+
*/
|
|
18056
|
+
inferenceDevices: record(string(), object({
|
|
18057
|
+
enabled: boolean(),
|
|
18058
|
+
weight: number().positive().optional()
|
|
18059
|
+
})).optional()
|
|
18040
18060
|
});
|
|
18041
18061
|
var CameraPipelineForAgentSchema = object({
|
|
18042
18062
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -12187,8 +12187,18 @@ var pipelineExecutorCapability = {
|
|
|
12187
12187
|
* - `runtime` — main camera-serving engine (no idle TTL).
|
|
12188
12188
|
* - `warm-override` — benchmark/test override held in the warm
|
|
12189
12189
|
* cache; auto-disposed after the idle TTL.
|
|
12190
|
+
* - `device-pool` — a concurrent per-device pool (Phase 2
|
|
12191
|
+
* multi-device, keyed by `deviceKey`) resolved
|
|
12192
|
+
* via `resolveDeviceFactory`. Runs alongside the
|
|
12193
|
+
* `runtime` engine on a DIFFERENT accelerator
|
|
12194
|
+
* (NPU / iGPU / Coral) — this is how the
|
|
12195
|
+
* Engines tab shows all pools running at once.
|
|
12190
12196
|
*/
|
|
12191
|
-
kind: _enum([
|
|
12197
|
+
kind: _enum([
|
|
12198
|
+
"runtime",
|
|
12199
|
+
"warm-override",
|
|
12200
|
+
"device-pool"
|
|
12201
|
+
]),
|
|
12192
12202
|
/** Native pid of the underlying Python pool (null when no pool). */
|
|
12193
12203
|
poolPid: number().nullable(),
|
|
12194
12204
|
/** ms since this factory was last used (null when not warm-tracked). */
|
|
@@ -18036,7 +18046,17 @@ var AgentPipelineSettingsSchema = object({
|
|
|
18036
18046
|
* it already uses to reach the hub). Set this only when the auto-detected
|
|
18037
18047
|
* address is wrong (multi-homed host, NAT, custom interface).
|
|
18038
18048
|
*/
|
|
18039
|
-
reachableHost: string().optional()
|
|
18049
|
+
reachableHost: string().optional(),
|
|
18050
|
+
/**
|
|
18051
|
+
* Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
|
|
18052
|
+
* weight}. Absent / all-disabled ⇒ the node's single default accelerator
|
|
18053
|
+
* (safe default); two+ enabled ⇒ the dispatcher balances detection sessions
|
|
18054
|
+
* across them so they run CONCURRENTLY.
|
|
18055
|
+
*/
|
|
18056
|
+
inferenceDevices: record(string(), object({
|
|
18057
|
+
enabled: boolean(),
|
|
18058
|
+
weight: number().positive().optional()
|
|
18059
|
+
})).optional()
|
|
18040
18060
|
});
|
|
18041
18061
|
var CameraPipelineForAgentSchema = object({
|
|
18042
18062
|
steps: array(PipelineStepInputSchema).readonly(),
|
|
@@ -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-
|
|
5
|
+
const require_dist = require("../dist-DUcDVlg7.js");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
let node_path = require("node:path");
|
|
8
8
|
//#region src/motion-wasm/wasm-motion-detector.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as evaluateZoneRules, K as hydrateSchema, O as motionDetectionCapability, V as BaseAddon, W as DeviceType } from "../dist-
|
|
1
|
+
import { C as evaluateZoneRules, K as hydrateSchema, O as motionDetectionCapability, V as BaseAddon, W as DeviceType } from "../dist-BT4Ug2Bf.mjs";
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
//#region src/motion-wasm/wasm-motion-detector.ts
|
|
@@ -3,11 +3,11 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_chunk = require("../chunk-D6vf50IK.js");
|
|
6
|
-
const require_dist = require("../dist-
|
|
6
|
+
const require_dist = require("../dist-DUcDVlg7.js");
|
|
7
7
|
const require_remote_restream = require("../remote-restream-CO36Sr30.js");
|
|
8
8
|
const require_sheet_geometry = require("../sheet-geometry-BR-ip0CP.js");
|
|
9
9
|
const require_worker_protocol = require("../worker-protocol-PP4jKHHJ.js");
|
|
10
|
-
const require_step_definitions = require("../step-definitions-
|
|
10
|
+
const require_step_definitions = require("../step-definitions-4tt-nRM4.js");
|
|
11
11
|
let node_child_process = require("node:child_process");
|
|
12
12
|
let node_url = require("node:url");
|
|
13
13
|
let sharp = require("sharp");
|
|
@@ -3300,11 +3300,13 @@ var PipelineRunnerAddon = class extends require_dist.BaseAddon {
|
|
|
3300
3300
|
async runDetailPipeline(steps, imageJpeg, deviceId) {
|
|
3301
3301
|
const api = this.ctxIfReady?.api;
|
|
3302
3302
|
if (!api) return null;
|
|
3303
|
+
const detailDeviceKey = this.attached.get(deviceId)?.config?.deviceKey;
|
|
3303
3304
|
try {
|
|
3304
3305
|
return await api.pipelineExecutor.runPipeline.mutate({
|
|
3305
3306
|
steps: [...steps],
|
|
3306
3307
|
image: new Uint8Array(imageJpeg),
|
|
3307
3308
|
deviceId,
|
|
3309
|
+
...detailDeviceKey ? { deviceKey: detailDeviceKey } : {},
|
|
3308
3310
|
plane: "full"
|
|
3309
3311
|
});
|
|
3310
3312
|
} catch (err) {
|
|
@@ -3787,7 +3789,8 @@ var PipelineRunnerAddon = class extends require_dist.BaseAddon {
|
|
|
3787
3789
|
log.error("runInference: this.ctx.api not available");
|
|
3788
3790
|
return null;
|
|
3789
3791
|
}
|
|
3790
|
-
const
|
|
3792
|
+
const camConfig = this.attached.get(deviceId)?.config;
|
|
3793
|
+
const steps = camConfig?.steps;
|
|
3791
3794
|
if (!steps) {
|
|
3792
3795
|
log.warn("runInference: no steps in attach config — skipping frame (legacy attach?)");
|
|
3793
3796
|
return null;
|
|
@@ -3821,6 +3824,7 @@ var PipelineRunnerAddon = class extends require_dist.BaseAddon {
|
|
|
3821
3824
|
steps: [...dispatchSteps],
|
|
3822
3825
|
...image !== void 0 ? { image } : { frame },
|
|
3823
3826
|
deviceId,
|
|
3827
|
+
...camConfig?.deviceKey ? { deviceKey: camConfig.deviceKey } : {},
|
|
3824
3828
|
plane: "frame"
|
|
3825
3829
|
});
|
|
3826
3830
|
} catch (err) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { B as errMsg, G as createEvent, V as BaseAddon, dt as EventCategory, et as _enum, it as lazy, j as pipelineRunnerCapability, k as nodePin, lt as string, nt as boolean, ot as number, st as object, tt as array, x as defineCustomActions, y as customAction } from "../dist-
|
|
1
|
+
import { B as errMsg, G as createEvent, V as BaseAddon, dt as EventCategory, et as _enum, it as lazy, j as pipelineRunnerCapability, k as nodePin, lt as string, nt as boolean, ot as number, st as object, tt as array, x as defineCustomActions, y as customAction } from "../dist-BT4Ug2Bf.mjs";
|
|
2
2
|
import { n as profileForStreamId, t as isRemoteRestream } from "../remote-restream-BeHi78PZ.mjs";
|
|
3
3
|
import { r as resolveHubHostname } from "../sheet-geometry-DcpuGTCm.mjs";
|
|
4
4
|
import { t as isWorkerReply } from "../worker-protocol-CyVJTZEO.mjs";
|
|
5
|
-
import { a as getStepDefinition } from "../step-definitions-
|
|
5
|
+
import { a as getStepDefinition } from "../step-definitions-DO0hIDMx.mjs";
|
|
6
6
|
import { fork } from "node:child_process";
|
|
7
7
|
import { fileURLToPath } from "node:url";
|
|
8
8
|
import sharp from "sharp";
|
|
@@ -3294,11 +3294,13 @@ var PipelineRunnerAddon = class extends BaseAddon {
|
|
|
3294
3294
|
async runDetailPipeline(steps, imageJpeg, deviceId) {
|
|
3295
3295
|
const api = this.ctxIfReady?.api;
|
|
3296
3296
|
if (!api) return null;
|
|
3297
|
+
const detailDeviceKey = this.attached.get(deviceId)?.config?.deviceKey;
|
|
3297
3298
|
try {
|
|
3298
3299
|
return await api.pipelineExecutor.runPipeline.mutate({
|
|
3299
3300
|
steps: [...steps],
|
|
3300
3301
|
image: new Uint8Array(imageJpeg),
|
|
3301
3302
|
deviceId,
|
|
3303
|
+
...detailDeviceKey ? { deviceKey: detailDeviceKey } : {},
|
|
3302
3304
|
plane: "full"
|
|
3303
3305
|
});
|
|
3304
3306
|
} catch (err) {
|
|
@@ -3781,7 +3783,8 @@ var PipelineRunnerAddon = class extends BaseAddon {
|
|
|
3781
3783
|
log.error("runInference: this.ctx.api not available");
|
|
3782
3784
|
return null;
|
|
3783
3785
|
}
|
|
3784
|
-
const
|
|
3786
|
+
const camConfig = this.attached.get(deviceId)?.config;
|
|
3787
|
+
const steps = camConfig?.steps;
|
|
3785
3788
|
if (!steps) {
|
|
3786
3789
|
log.warn("runInference: no steps in attach config — skipping frame (legacy attach?)");
|
|
3787
3790
|
return null;
|
|
@@ -3815,6 +3818,7 @@ var PipelineRunnerAddon = class extends BaseAddon {
|
|
|
3815
3818
|
steps: [...dispatchSteps],
|
|
3816
3819
|
...image !== void 0 ? { image } : { frame },
|
|
3817
3820
|
deviceId,
|
|
3821
|
+
...camConfig?.deviceKey ? { deviceKey: camConfig.deviceKey } : {},
|
|
3818
3822
|
plane: "frame"
|
|
3819
3823
|
});
|
|
3820
3824
|
} catch (err) {
|
package/dist/recorder/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_chunk = require("../chunk-D6vf50IK.js");
|
|
2
|
-
const require_dist = require("../dist-
|
|
2
|
+
const require_dist = require("../dist-DUcDVlg7.js");
|
|
3
3
|
const require_sheet_geometry = require("../sheet-geometry-BR-ip0CP.js");
|
|
4
4
|
const require_model_download_service_Cp9f4dk6 = require("../model-download-service-Cp9f4dk6-Dv-oFwjN.js");
|
|
5
5
|
let node_child_process = require("node:child_process");
|
package/dist/recorder/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as errMsg, D as migrateConfigToBands, I as storageEvictableCapability, K as hydrateSchema, M as recordingCapability, N as recordingExportCapability, P as resolveScrubThumbnailGeometry, Q as selectAssignedProfileSlots, V as BaseAddon, W as DeviceType, ct as record, d as OpsLogEntrySchema, dt as EventCategory, f as RecordingConfigSchema, k as nodePin, l as ExportRecordSchema, lt as string, q as isEvent, s as EVENT_PAD_MS, tt as array } from "../dist-
|
|
1
|
+
import { B as errMsg, D as migrateConfigToBands, I as storageEvictableCapability, K as hydrateSchema, M as recordingCapability, N as recordingExportCapability, P as resolveScrubThumbnailGeometry, Q as selectAssignedProfileSlots, V as BaseAddon, W as DeviceType, ct as record, d as OpsLogEntrySchema, dt as EventCategory, f as RecordingConfigSchema, k as nodePin, l as ExportRecordSchema, lt as string, q as isEvent, s as EVENT_PAD_MS, tt as array } from "../dist-BT4Ug2Bf.mjs";
|
|
2
2
|
import { n as computeSheetGeometry, r as resolveHubHostname, t as allTilePlacements } from "../sheet-geometry-DcpuGTCm.mjs";
|
|
3
3
|
import { n as createFileDataPlaneHandler, s as parseRangeHeader, t as contentTypeFor } from "../model-download-service-Cp9f4dk6-CwUb5v3Y.mjs";
|
|
4
4
|
import { spawn } from "node:child_process";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_dist = require("./dist-
|
|
1
|
+
const require_dist = require("./dist-DUcDVlg7.js");
|
|
2
2
|
//#region src/detection-pipeline/registry/model-catalogs.ts
|
|
3
3
|
var HF_REPO = "camstack/camstack-models";
|
|
4
4
|
var HF_SCRYPTED = "scrypted/plugin-models";
|
|
@@ -61,6 +61,71 @@ var YOLO26_TIER_NAME = {
|
|
|
61
61
|
m: "Medium",
|
|
62
62
|
l: "Large"
|
|
63
63
|
};
|
|
64
|
+
var YOLOV9_TIER_NAME = {
|
|
65
|
+
t: "Tiny",
|
|
66
|
+
s: "Small",
|
|
67
|
+
m: "Medium",
|
|
68
|
+
c: "Compact"
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* OUR YOLOv9 family (Ultralytics base) — the NPU-detection line. Unlike yolo26
|
|
72
|
+
* (whose arch the Intel NPU rejects → 0 frames), yolov9 COMPILES AND RUNS on the
|
|
73
|
+
* Intel NPU ("AI Boost"). Empirically: our yolov9t-320-int8 = ~298 fps on the
|
|
74
|
+
* NPU vs yolo26n = 103 on the iGPU (~2.9×). t/s/m/c × {320,640}; each size ships
|
|
75
|
+
* a base entry (onnx + coreml + openvino **fp16**) + an OpenVINO **int8** entry
|
|
76
|
+
* (the NPU/iGPU-optimal config). CoreML (fp16) runs on the Mac ANE — the
|
|
77
|
+
* apple-ane default detector (`default-detection-model.ts`).
|
|
78
|
+
*/
|
|
79
|
+
var yolov9Reduced = (tier, res, sizes) => {
|
|
80
|
+
const name = YOLOV9_TIER_NAME[tier] ?? tier.toUpperCase();
|
|
81
|
+
return [{
|
|
82
|
+
id: `yolov9${tier}-${res}`,
|
|
83
|
+
group: {
|
|
84
|
+
family: "yolov9",
|
|
85
|
+
tier,
|
|
86
|
+
resolution: res
|
|
87
|
+
},
|
|
88
|
+
name: `YOLOv9 ${name} @${res}`,
|
|
89
|
+
description: `YOLOv9 ${name} @${res}×${res} (Ultralytics) — OpenVINO fp16, runs on Intel NPU + iGPU (NPU-compatible; yolo26 is not).`,
|
|
90
|
+
inputSize: {
|
|
91
|
+
width: res,
|
|
92
|
+
height: res
|
|
93
|
+
},
|
|
94
|
+
labels: [],
|
|
95
|
+
preprocessMode: "letterbox",
|
|
96
|
+
formats: {
|
|
97
|
+
onnx: {
|
|
98
|
+
url: hf(`objectDetection/yolov9/onnx/camstack-yolov9${tier}-${res}.onnx`),
|
|
99
|
+
sizeMB: sizes.onnx
|
|
100
|
+
},
|
|
101
|
+
coreml: {
|
|
102
|
+
url: hf(`objectDetection/yolov9/coreml/camstack-yolov9${tier}-${res}.mlpackage`),
|
|
103
|
+
sizeMB: sizes.coreml,
|
|
104
|
+
isDirectory: true,
|
|
105
|
+
files: [...MLPACKAGE_FILES],
|
|
106
|
+
runtimes: ["python"]
|
|
107
|
+
},
|
|
108
|
+
openvino: ovFormat(hf(`objectDetection/yolov9/openvino/camstack-yolov9${tier}-${res}-fp16.xml`), sizes.ovFp16)
|
|
109
|
+
}
|
|
110
|
+
}, {
|
|
111
|
+
id: `yolov9${tier}-${res}-int8`,
|
|
112
|
+
group: {
|
|
113
|
+
family: "yolov9",
|
|
114
|
+
tier,
|
|
115
|
+
precision: "int8",
|
|
116
|
+
resolution: res
|
|
117
|
+
},
|
|
118
|
+
name: `YOLOv9 ${name} @${res} (INT8)`,
|
|
119
|
+
description: `YOLOv9 ${name} @${res} — OpenVINO INT8 for the Intel NPU / iGPU. The NPU's fastest config (our-base detector).`,
|
|
120
|
+
inputSize: {
|
|
121
|
+
width: res,
|
|
122
|
+
height: res
|
|
123
|
+
},
|
|
124
|
+
labels: [],
|
|
125
|
+
preprocessMode: "letterbox",
|
|
126
|
+
formats: { openvino: ovFormat(hf(`objectDetection/yolov9/openvino/camstack-yolov9${tier}-${res}-int8.xml`), sizes.ovInt8) }
|
|
127
|
+
}];
|
|
128
|
+
};
|
|
64
129
|
/**
|
|
65
130
|
* Reduced-input YOLO26 variants (2026-07-11). A lower square input (320 / 256)
|
|
66
131
|
* is the biggest, cheapest latency lever measured across every runtime — Mac
|
|
@@ -121,84 +186,6 @@ var yolo26Reduced = (tier, res, sizes) => {
|
|
|
121
186
|
}];
|
|
122
187
|
};
|
|
123
188
|
var OBJECT_DETECTION_MODELS = [
|
|
124
|
-
{
|
|
125
|
-
id: "yolov9t",
|
|
126
|
-
legacy: true,
|
|
127
|
-
name: "YOLOv9 Tiny",
|
|
128
|
-
description: "YOLOv9 Tiny — ultra-lightweight next-gen detector",
|
|
129
|
-
inputSize: {
|
|
130
|
-
width: 640,
|
|
131
|
-
height: 640
|
|
132
|
-
},
|
|
133
|
-
labels: [],
|
|
134
|
-
preprocessMode: "letterbox",
|
|
135
|
-
formats: {
|
|
136
|
-
onnx: {
|
|
137
|
-
url: hf("objectDetection/yolov9/onnx/camstack-yolov9t.onnx"),
|
|
138
|
-
sizeMB: 8
|
|
139
|
-
},
|
|
140
|
-
coreml: {
|
|
141
|
-
url: hf("objectDetection/yolov9/coreml/camstack-yolov9t.mlpackage"),
|
|
142
|
-
sizeMB: 4,
|
|
143
|
-
isDirectory: true,
|
|
144
|
-
files: [...MLPACKAGE_FILES],
|
|
145
|
-
runtimes: ["python"]
|
|
146
|
-
},
|
|
147
|
-
openvino: ovFormat(hf("objectDetection/yolov9/openvino/camstack-yolov9t.xml"), 6)
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
id: "yolov9s",
|
|
152
|
-
legacy: true,
|
|
153
|
-
name: "YOLOv9 Small",
|
|
154
|
-
description: "YOLOv9 Small — improved efficiency over YOLOv8s",
|
|
155
|
-
inputSize: {
|
|
156
|
-
width: 640,
|
|
157
|
-
height: 640
|
|
158
|
-
},
|
|
159
|
-
labels: [],
|
|
160
|
-
preprocessMode: "letterbox",
|
|
161
|
-
formats: {
|
|
162
|
-
onnx: {
|
|
163
|
-
url: hf("objectDetection/yolov9/onnx/camstack-yolov9s.onnx"),
|
|
164
|
-
sizeMB: 28
|
|
165
|
-
},
|
|
166
|
-
coreml: {
|
|
167
|
-
url: hf("objectDetection/yolov9/coreml/camstack-yolov9s.mlpackage"),
|
|
168
|
-
sizeMB: 14,
|
|
169
|
-
isDirectory: true,
|
|
170
|
-
files: [...MLPACKAGE_FILES],
|
|
171
|
-
runtimes: ["python"]
|
|
172
|
-
},
|
|
173
|
-
openvino: ovFormat(hf("objectDetection/yolov9/openvino/camstack-yolov9s.xml"), 16)
|
|
174
|
-
}
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
id: "yolov9c",
|
|
178
|
-
legacy: true,
|
|
179
|
-
name: "YOLOv9 C",
|
|
180
|
-
description: "YOLOv9 C — high-accuracy compact model",
|
|
181
|
-
inputSize: {
|
|
182
|
-
width: 640,
|
|
183
|
-
height: 640
|
|
184
|
-
},
|
|
185
|
-
labels: [],
|
|
186
|
-
preprocessMode: "letterbox",
|
|
187
|
-
formats: {
|
|
188
|
-
onnx: {
|
|
189
|
-
url: hf("objectDetection/yolov9/onnx/camstack-yolov9c.onnx"),
|
|
190
|
-
sizeMB: 97
|
|
191
|
-
},
|
|
192
|
-
coreml: {
|
|
193
|
-
url: hf("objectDetection/yolov9/coreml/camstack-yolov9c.mlpackage"),
|
|
194
|
-
sizeMB: 48,
|
|
195
|
-
isDirectory: true,
|
|
196
|
-
files: [...MLPACKAGE_FILES],
|
|
197
|
-
runtimes: ["python"]
|
|
198
|
-
},
|
|
199
|
-
openvino: ovFormat(hf("objectDetection/yolov9/openvino/camstack-yolov9c.xml"), 49)
|
|
200
|
-
}
|
|
201
|
-
},
|
|
202
189
|
{
|
|
203
190
|
id: "yolo26n",
|
|
204
191
|
group: {
|
|
@@ -375,114 +362,6 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
375
362
|
runtimes: ["python"]
|
|
376
363
|
} }
|
|
377
364
|
},
|
|
378
|
-
{
|
|
379
|
-
id: "scrypted-yolov9t-relu",
|
|
380
|
-
legacy: true,
|
|
381
|
-
name: "YOLOv9 Tiny ReLU",
|
|
382
|
-
description: "YOLOv9t ReLU — optimized for int8 quantization",
|
|
383
|
-
inputSize: {
|
|
384
|
-
width: 320,
|
|
385
|
-
height: 320
|
|
386
|
-
},
|
|
387
|
-
labels: [],
|
|
388
|
-
preprocessMode: "letterbox",
|
|
389
|
-
formats: {
|
|
390
|
-
onnx: {
|
|
391
|
-
url: hfScrypted("onnx/scrypted_yolov9t_relu/scrypted_yolov9t_relu.onnx"),
|
|
392
|
-
sizeMB: 8.1
|
|
393
|
-
},
|
|
394
|
-
coreml: {
|
|
395
|
-
url: hfScrypted("coreml/scrypted_yolov9t_relu/scrypted_yolov9t_relu.mlpackage"),
|
|
396
|
-
sizeMB: 4,
|
|
397
|
-
isDirectory: true,
|
|
398
|
-
files: [...MLPACKAGE_FILES],
|
|
399
|
-
runtimes: ["python"]
|
|
400
|
-
},
|
|
401
|
-
openvino: ovFormat(hf("objectDetection/scrypted-yolov9-relu/openvino/scrypted_yolov9t_relu.xml"), 6)
|
|
402
|
-
}
|
|
403
|
-
},
|
|
404
|
-
{
|
|
405
|
-
id: "scrypted-yolov9s-relu",
|
|
406
|
-
legacy: true,
|
|
407
|
-
name: "YOLOv9 Small ReLU",
|
|
408
|
-
description: "YOLOv9s ReLU — improved efficiency, int8 ready",
|
|
409
|
-
inputSize: {
|
|
410
|
-
width: 320,
|
|
411
|
-
height: 320
|
|
412
|
-
},
|
|
413
|
-
labels: [],
|
|
414
|
-
preprocessMode: "letterbox",
|
|
415
|
-
formats: {
|
|
416
|
-
onnx: {
|
|
417
|
-
url: hfScrypted("onnx/scrypted_yolov9s_relu/scrypted_yolov9s_relu.onnx"),
|
|
418
|
-
sizeMB: 27.9
|
|
419
|
-
},
|
|
420
|
-
coreml: {
|
|
421
|
-
url: hfScrypted("coreml/scrypted_yolov9s_relu/scrypted_yolov9s_relu.mlpackage"),
|
|
422
|
-
sizeMB: 14,
|
|
423
|
-
isDirectory: true,
|
|
424
|
-
files: [...MLPACKAGE_FILES],
|
|
425
|
-
runtimes: ["python"]
|
|
426
|
-
},
|
|
427
|
-
openvino: ovFormat(hf("objectDetection/scrypted-yolov9-relu/openvino/scrypted_yolov9s_relu.xml"), 16)
|
|
428
|
-
}
|
|
429
|
-
},
|
|
430
|
-
{
|
|
431
|
-
id: "scrypted-yolov9c-relu",
|
|
432
|
-
legacy: true,
|
|
433
|
-
name: "YOLOv9 C ReLU",
|
|
434
|
-
description: "YOLOv9c ReLU — high-accuracy, int8 ready",
|
|
435
|
-
inputSize: {
|
|
436
|
-
width: 320,
|
|
437
|
-
height: 320
|
|
438
|
-
},
|
|
439
|
-
labels: [],
|
|
440
|
-
preprocessMode: "letterbox",
|
|
441
|
-
formats: {
|
|
442
|
-
onnx: {
|
|
443
|
-
url: hfScrypted("onnx/scrypted_yolov9c_relu/scrypted_yolov9c_relu.onnx"),
|
|
444
|
-
sizeMB: 96.9
|
|
445
|
-
},
|
|
446
|
-
coreml: {
|
|
447
|
-
url: hfScrypted("coreml/scrypted_yolov9c_relu/scrypted_yolov9c_relu.mlpackage"),
|
|
448
|
-
sizeMB: 48,
|
|
449
|
-
isDirectory: true,
|
|
450
|
-
files: [...MLPACKAGE_FILES],
|
|
451
|
-
runtimes: ["python"]
|
|
452
|
-
},
|
|
453
|
-
openvino: ovFormat(hf("objectDetection/scrypted-yolov9-relu/openvino/scrypted_yolov9c_relu.xml"), 49)
|
|
454
|
-
}
|
|
455
|
-
},
|
|
456
|
-
{
|
|
457
|
-
id: "scrypted-yolov9m-relu",
|
|
458
|
-
legacy: true,
|
|
459
|
-
name: "YOLOv9 M ReLU",
|
|
460
|
-
description: "YOLOv9m ReLU — medium, int8 ready",
|
|
461
|
-
inputSize: {
|
|
462
|
-
width: 320,
|
|
463
|
-
height: 320
|
|
464
|
-
},
|
|
465
|
-
labels: [],
|
|
466
|
-
preprocessMode: "letterbox",
|
|
467
|
-
formats: {
|
|
468
|
-
onnx: {
|
|
469
|
-
url: hfScrypted("onnx/scrypted_yolov9m_relu/scrypted_yolov9m_relu.onnx"),
|
|
470
|
-
sizeMB: 76.6
|
|
471
|
-
},
|
|
472
|
-
coreml: {
|
|
473
|
-
url: hfScrypted("coreml/scrypted_yolov9m_relu/scrypted_yolov9m_relu.mlpackage"),
|
|
474
|
-
sizeMB: 38,
|
|
475
|
-
isDirectory: true,
|
|
476
|
-
files: [...MLPACKAGE_FILES],
|
|
477
|
-
runtimes: ["python"]
|
|
478
|
-
},
|
|
479
|
-
openvino: ovFormat(hf("objectDetection/scrypted-yolov9-relu/openvino/scrypted_yolov9m_relu.xml"), 38)
|
|
480
|
-
}
|
|
481
|
-
},
|
|
482
|
-
ovPrecisionVariant("yolov9t", "objectDetection/yolov9/openvino", "YOLOv9 Tiny", "fp16", 5, true),
|
|
483
|
-
ovPrecisionVariant("yolov9t", "objectDetection/yolov9/openvino", "YOLOv9 Tiny", "int8", 3, true),
|
|
484
|
-
ovPrecisionVariant("yolov9s", "objectDetection/yolov9/openvino", "YOLOv9 Small", "fp16", 15, true),
|
|
485
|
-
ovPrecisionVariant("yolov9s", "objectDetection/yolov9/openvino", "YOLOv9 Small", "int8", 8, true),
|
|
486
365
|
ovPrecisionVariant("yolo26n", "objectDetection/yolo26/openvino", "YOLO26 Nano", "fp16", 5, true),
|
|
487
366
|
ovPrecisionVariant("yolo26n", "objectDetection/yolo26/openvino", "YOLO26 Nano", "int8", 3),
|
|
488
367
|
ovPrecisionVariant("yolo26s", "objectDetection/yolo26/openvino", "YOLO26 Small", "fp16", 19, true),
|
|
@@ -539,6 +418,54 @@ var OBJECT_DETECTION_MODELS = [
|
|
|
539
418
|
ovFp32: 99.85,
|
|
540
419
|
ovInt8: 26.31
|
|
541
420
|
}),
|
|
421
|
+
...yolov9Reduced("t", 320, {
|
|
422
|
+
onnx: 8,
|
|
423
|
+
coreml: 8.3,
|
|
424
|
+
ovFp16: 4,
|
|
425
|
+
ovInt8: 3
|
|
426
|
+
}),
|
|
427
|
+
...yolov9Reduced("t", 640, {
|
|
428
|
+
onnx: 8,
|
|
429
|
+
coreml: 8.4,
|
|
430
|
+
ovFp16: 4,
|
|
431
|
+
ovInt8: 3
|
|
432
|
+
}),
|
|
433
|
+
...yolov9Reduced("s", 320, {
|
|
434
|
+
onnx: 27,
|
|
435
|
+
coreml: 27.8,
|
|
436
|
+
ovFp16: 14,
|
|
437
|
+
ovInt8: 8
|
|
438
|
+
}),
|
|
439
|
+
...yolov9Reduced("s", 640, {
|
|
440
|
+
onnx: 27,
|
|
441
|
+
coreml: 27.9,
|
|
442
|
+
ovFp16: 14,
|
|
443
|
+
ovInt8: 8
|
|
444
|
+
}),
|
|
445
|
+
...yolov9Reduced("m", 320, {
|
|
446
|
+
onnx: 76,
|
|
447
|
+
coreml: 76.8,
|
|
448
|
+
ovFp16: 38,
|
|
449
|
+
ovInt8: 20
|
|
450
|
+
}),
|
|
451
|
+
...yolov9Reduced("m", 640, {
|
|
452
|
+
onnx: 76,
|
|
453
|
+
coreml: 76.9,
|
|
454
|
+
ovFp16: 38,
|
|
455
|
+
ovInt8: 20
|
|
456
|
+
}),
|
|
457
|
+
...yolov9Reduced("c", 320, {
|
|
458
|
+
onnx: 97,
|
|
459
|
+
coreml: 97.1,
|
|
460
|
+
ovFp16: 49,
|
|
461
|
+
ovInt8: 25
|
|
462
|
+
}),
|
|
463
|
+
...yolov9Reduced("c", 640, {
|
|
464
|
+
onnx: 97,
|
|
465
|
+
coreml: 97,
|
|
466
|
+
ovFp16: 49,
|
|
467
|
+
ovInt8: 25
|
|
468
|
+
}),
|
|
542
469
|
ovPrecisionVariant("yolo26x", "objectDetection/yolo26/openvino", "YOLO26 XLarge", "fp16", 112, true),
|
|
543
470
|
ovPrecisionVariant("yolo26x", "objectDetection/yolo26/openvino", "YOLO26 XLarge", "int8", 56, true)
|
|
544
471
|
];
|