Option
HeimHeim Skill DevOps und CI/CD vss-deploy-detection-tracking-2d

vss-deploy-detection-tracking-2d

NVIDIA/skills NVIDIA/skills

Stellen Sie den RTVI-CV-2D-Mikroservice für Erkennung und Verfolgung bereit, debuggen Sie ihn und betreiben Sie ihn, und rufen Sie dessen REST-API für die Stream-Verwaltung, Zustandsprüfungen und Metriken auf.

...Alle erweitern
1
Zeit aktualisiert 28. September 2026

Zweck

Bereitstellung, Fehlerbehebung und Betrieb des 2D-Mikroservices zur Erkennung und Verfolgung von RTVI-CV sowie Nutzung seiner REST-API.

Voraussetzungen

  • Aktive VSS-Bereitstellung, erreichbar unter $HOST_IP (siehe vss-deploy-profile und references/).
  • NGC-Anmeldedaten in $NGC_CLI_API_KEY und $NVIDIA_API_KEY für das Abrufen von Images.
  • curl, jq und Docker müssen auf dem aufrufenden Rechner verfügbar sein.

Anleitung

Befolgen Sie die unten aufgeführten Routing-Tabellen und Schritt-für-Schritt-Workflows. Jeder Abschnitt, der mit „Workflow“, „Schnellstart“ oder „Ablauf“ endet, ist von oben nach unten auszuführen. Detailliertes Referenzmaterial finden Sie in „references/“ und Hilfsskripte in „scripts/“ – rufen Sie diese über „run_script“ auf, wenn die Skill auf ein Skript namentlich verweist.

Beispiele

Fertig ausgearbeitete End-to-End-Beispiele befinden sich im Verzeichnis „evals/“ (jedes *.json-Manifest enthält ein ausführbares Szenario) sowie inline in den unten stehenden „curl“-Blöcken pro Workflow. Führen Sie eine Tier-3-Bewertung mit „nv-base validate --agent-eval“ durch, um diese abzuspielen.

Einschränkungen

  • Erfordert, dass das entsprechende VSS-Profil bzw. der entsprechende Microservice bereitgestellt und für den Aufrufer erreichbar ist.
  • Von NGC gehostete Modelle und NIMs können Rate-Limits, Anforderungen an den GPU-Speicher sowie Lizenzbeschränkungen unterliegen.
  • Die Grenzen für Parallelität, GPU-Speicher und Speicherplatz hängen von der Host-Hardware und der Compose-Datei des Profils ab.

Fehlerbehebung

  • Fehler: REST-Aufruf gibt „Connection refused“ zurück. Ursache: Ziel-Mikroservice läuft nicht. Lösung: /docs oder /health abfragen; erneut bereitstellen über vss-deploy-profile oder die entsprechende vss-deploy-*- Fähigkeit.
  • Fehler: HTTP-Fehler 401/403 bei NGC-Abrufen. Ursache: NGC_CLI_API_KEY fehlt oder ist abgelaufen. Lösung: Mit „docker login nvcr.io“ anmelden und den Schlüssel vor einem erneuten Versuch erneut exportieren.
  • Fehler: Container OOM oder Modell kann nicht geladen werden. Ursache: Unzureichender GPU-Speicher für das ausgewählte Profil. Lösung: Wechseln Sie zu einer kleineren Variante oder geben Sie GPUs mit „docker compose down“ frei.

RTVI-CV – Erkennung und Verfolgung (Unified Skill)

Einheitliche Skill für den Microservice „Real Time Video Intelligence CV“ (RTVI-CV). Zwei Aktionsflächen in einer Skill:

  • RTVI-CV-Container lokalbereitstellen / betreiben / debuggen / beenden → siehe references/deploy-vss-detection-tracking-2d.md
  • Aufruf der RTVI-CV-REST-API (Streams, Status, Metriken, Einbettungen) auf einer laufenden Instanz → siehe references/usage-vss-detection-tracking-2d.md

Dienst: rtvi-cv (metropolis_perception_app) Image: nvcr.io//: — vom Benutzer bei der Bereitstellung bereitgestellt REST-Port: 9000 (/api/v1 — /live, /ready, /startup, /metrics, /stream/add, /stream/remove, Einbettungen) Hardware: x86/aarch64-dGPU (T4, A100, L40, H100, B200, RTX), SBSA (Spark, Grace-Hopper), Jetson (Thor, Orin, Xavier)

Aktionsweiterleitung – einmal pro Aufruf auswählen

Benutzerabsicht (Beispielformulierungen) Ablauf Diese Referenz laden
rtvi-cv-Warehouse 2D bereitstellen, rtvicv-Warehouse-3D mit 4 Streams ausführen, SmartCity-Gdino starten, Perception-App starten, sparse4d aufrufen DEPLOY references/deploy-vss-detection-tracking-2d.md
rtvi-cv anhalten, abbauen, den Perception-Container beenden, rtvicv-perception-docker bereinigen TEARDOWN (wird im Deploy-Dokument behandelt → „Modusauswahl“) references/deploy-vss-detection-tracking-2d.md + references/teardown-flow.md
rtvi-cv-Protokolle prüfen, Absturz von rtvi-cv diagnostizieren, Fehler beim Healthcheck beheben, rtvi-cv lässt sich nicht starten DEBUG references/deploy-vss-detection-tracking-2d.md + references/troubleshooting.md
Stream hinzufügen, Kamera entfernen, Streams auflisten, Zustandsprüfung durchführen, Ist rtvi-cv bereit?, Metriken abrufen, Wie hoch ist die Bildrate (FPS)?, GPU-Auslastung prüfen, Text-Embeddings generieren, rtvi-cv-API aufrufen API-NUTZUNG references/usage-vss-detection-tracking-2d.md + references/api-reference.md

Auswahlregel: Die Formulierung des Benutzers mit der obigen Tabelle abgleichen und sofort die entsprechende Referenzdatei laden. Die Abläufe nicht vermischen – „DEPLOY“ geht davon aus, dass noch kein Container läuft; „API-NUTZUNG“ geht davon aus, dass der Container bereits unter http://:9000 läuft.

Wenn die Absicht wirklich mehrdeutig ist (z. B. wenn der Benutzer nur sagt: „Ich möchte rtvi-cv verwenden“), stelle eine „AskQuestion“-Frage: Soll eine neue Instanz bereitgestellt oder eine bereits laufende Instanz aufgerufen werden?

Was befindet sich wo

vss-deploy-detection-tracking-2d/
├── SKILL.md          # diese Datei (Routing + Verträge)
├── assets/           # Datendateien (deploy-defaults.yml – einzige Quelle für Tags / Referenzen / Pfade / GPU)
├── evals/            # Tier-3-Evaluierungsmanifeste (deploy-evals.json, usage-evals.json)
├── scripts/          # 23 Bash- und Python-Hilfsprogramme (siehe `scripts/` für die vollständige Liste)
└── references/       # Workflow-Runbooks (Deployment / API-Nutzung / Teardown / Fehlerbehebung / …)

Die vollständige Auflistung der einzelnen Dateien und die jeweiligen Inhalte der Referenzdokumente finden Sie unter references/workflow-reference.md.

Alle Skripte werden vom Skill-Stammverzeichnis aus über $SKILL_DIR/scripts/ aufgerufen – Pfade innerhalb der Deploy-Referenzdokumentation werden wörtlich beibehalten und korrekt aufgelöst, wenn der Agent vom Skill-Stammverzeichnis aus ausgeführt wird.

Verfügbare Skripte

Hilfsfunktionen befinden sich im Verzeichnis „scripts/“ und werden im Skill-Stammverzeichnis namentlich aufgerufen – rufen Sie jede über `run_script("scripts/")` auf, damit der Agent einen korrekten Tool-Aufruf protokolliert.

Skript Zweck Argumente
load_defaults.sh Erkennt die Plattform (x86 dGPU / SBSA / Jetson) und ermittelt die YAML-Standardwerte aus der Datei „assets/deploy-defaults.yml“. --Anwendungsfall
fetch_resources.sh NGC-Ressourcen herunterladen und entpacken, nach Layout suchen. --ngc-ref (optional)
apply_in_container.sh Host-seitiger Wrapper für Schritt 4 (apply_config.sh im laufenden Container).
apply_config.sh Pfadersetzung im Container, Batch, Sink, Quellen, Engine-Cache.
start_app_in_container.sh Hostseitiger Wrapper für Schritt 5 (run_app_and_wait.sh).
run_app_and_wait.sh App-Start im Container + Bereitschaftsprüfung + Metriken + Protokollierung.
add_streams.sh / update_stream_sources.sh REST-Stream-Lebenszyklus für Schritt 6. ...
collect_metrics.sh Snapshot von /api/v1/metrics abrufen. keine
discover_streams.sh Auflistung aktiver Streams über /stream/get-stream-info. keine
synthesize_docker_run.sh Gibt die plattformspezifische Docker-Run -Zeile für die aufgelöste Umgebung aus. keine
render_box.sh Rendert den Beleg mit fester Spaltenbreite.
calibration_manager.py Verwalten Sie Kalibrierungsartefakte und die Invalidierung des Engine-Caches pro Anwendungsfall. --usecase --reset

Eine vollständige Übersicht über die Hilfsskripte (Cache, GPU-Prüfungen, Einrichtung) finden Sie unter scripts/; die Option --help jedes Skripts beschreibt dessen Argumente.

So nutzen Sie diese Funktion

  1. Lesen Sie zuerst diese Datei. Sie dient lediglich der Weiterleitung – sie enthält keine Workflows.
  2. Gleichen Sie die Absicht des Benutzers mit der obigen Routing-Tabelleab.
  3. Lade genau ein Referenzdokument (DEPLOY oder API USAGE). Lade nicht beide vorab – jede Referenz ist umfangreich und enthält ihren eigenen vollständigen Vertrag.
  4. Halten Sie sich genau an das geladene Referenzdokument. Bei den Referenzdokumenten handelt es sich um die Byte-für-Byte beibehaltenen Verträge aus den Vorgängerskills vss-deploy-detection-tracking-2d (deploy/teardown/debug) und rtvicv-api (REST-API) – jede Schrittreihenfolge, jede Bash-Batching-Regel, jede Box-Rendering-Regel und jeder „AskQuestion “-Vertrag bleibt erhalten.
  5. Für DEPLOY erzwingt die Referenzdokumentation ihren eigenen Startvertrag: einzeilige Bestätigung → Aufruf des Planungstools (TodoWrite-Array mit 5 To-dos ODER 5 aufeinanderfolgende TaskCreate- Aufrufe beim neueren Claude-Code) → Frage in Schritt 1. Keine Erläuterungen, keine Vorabprüfung und niemals „loading TodoWrite/TaskCreate“ oder andere Texte zur Aufschiebung von Tool-Aufrufen ausgeben – das Planungstool wird im Hintergrund geladen.

Ausgabekontrakt – DEPLOY-Ablauf

Bei der Ausführung des DEPLOY-/TEARDOWN-/DEBUG-Ablaufs MUSS der Agent bei jeder erfolgreichen Bereitstellung alle vier unten aufgeführten Punkte einhalten. Dies sind die einzigen Rückmeldungskanäle für den Benutzer zwischen den Schritten; das Überspringen eines dieser Punkte stellt eine Verhaltensregression dar.

  1. Stelle den Abschluss jedes Schritts in einem Feld mit fester Breite dar – Schritt 1 : Bereitstellungsziele, Schritt 2 : Pipeline-Konfiguration, Schritt 3 : Container, Schritt 4: Konfiguration anwenden, Schritt 5 : Plan + Ergebnisse. Nicht nur die abschließende Zusammenfassung. Das Feld ist die Schrittbestätigung für den Benutzer. Die Geometrie ist fest vorgegeben (siehe § „Universelles Feldformat“ weiter unten). Die Inhalts regeln pro Schritt (welche Zeilen in welches Feld gehören) befinden sich in references/deploy-vss-detection-tracking-2d.md unter „Inhaltsregel für Feld Schritt N“.
  2. Nach dem Feld „Schritt 5: Ergebnisse“ rufen Sie den Schritt 6 „AskUserQuestion“ aus der Datei „references/next-steps.md“,Abschnitt „11.c“, auf – ersetze sie niemals durch eine frei formatierte Aufzählung „Nächste Schritte “. Das Menü ist der Ausstiegspunkt des Deploys: Es ermöglicht dem Benutzer, Metriken auszuführen, Streams zu verwalten, Protokolle zu überwachen oder den Deploy mit einem Klick zu beenden, anstatt sich curl-URLs merken zu müssen.
  3. Nachdem der Benutzer einen Bucket aus Schritt 6 ausgewählt hat, rufe die Folgeabfrage „AskUserQuestion“ aus references/next-steps.md § „11.d“ auf – ersetze diese niemals durch Prosa + kopierfertige curl-Beispiele + eine Freitext-Frage wie „Soll ich X ausführen?“. Jeder Bucket verfügt über ein eigenes Menü mit konkreten Aktionen; der Benutzer wählt die Aktion aus, woraufhin der Skill das API-Feld anzeigt und den Curl-Befehl ausführt. Bucket-spezifische Folgeaktionen:
    • Streams verwalten → Hinzufügen / Entfernen / Auflisten. „Entfernen“ generiert seine Optionen dynamisch aus /stream/get-stream-info – eine Option pro aktivem Stream mit den Bezeichnungen „ “ · „ “ sowie „Alle entfernen“, wenn ACTIVE > 1 (vollständige Spezifikation: §„remove_streams sub-flow“).
    • Bereitstellung beenden → App stoppen / Container stoppen / Vollständiger Abbau.
    • Metriken und FPS prüfen → keine weiteren Schritte; „collect_metrics.sh“ direkt nach der Ausgabe des API-Kastens „/api/v1/metrics“ ausführen.
    • Lebensfähigkeit / Bereitschaft prüfen → keine weiteren Maßnahmen; alle drei Health-Endpunkte prüfen, nachdem deren API-Boxen ausgegeben wurden.
  4. Den VOLLSTÄNDIGEN Inhalt pro Schritt rendern, keine Übersichtszeile – das Rendern des Feldes ist notwendig, aber nicht ausreichend. Jeder Schritt hat eine Spezifikation zur Zeilenzusammensetzung in references/deploy-vss-detection-tracking-2d.md unter „Step N box content rule“. Schritt 4 (Konfiguration anwenden) ist der Punkt, an dem der Agent am häufigsten abstürzt – seine kanonische Schlüsselliste pro Anwendungsfall befindet sich in references/apply-config.md § „Per-use-case complete edit list“, und der Agent MUSS eine ✔ [section] key=value — Anmerkungszeile pro Schlüssel in dieser Tabelle für den aktiven Anwendungsfall + Einstellungenausgeben. Ein Abschnitt mit 5 Schlüsseln → 5 Zeilen; ein Abschnitt mit 6 Schlüsseln → 6 Zeilen. Niemals eine Übersichtszeile pro Abschnitt.

Verboten (dies sind die Abkürzungen, auf die der Agent unter Druck zurückgreift, und sie beeinträchtigen die Benutzererfahrung):

  • ❌ Interne Erläuterungen zum Laden von Tools. Niemals Texte wie „Ich muss TodoWrite laden (ein verzögertes Tool, das der Skill für das Aufgaben-Widget aufruft)“, „TaskCreate wird geladen…“, „ToolSearch für das Planungstool wird aufgerufen…“ oder andere Texte über das Auflösen, Laden oder Abrufen von verzögerten Tools ausgeben. Der Agent lädt Tools im Hintergrund. Der Nutzer sieht immer nur die ✔- -Zusammenfassungszeile, gefolgt vom Widget – niemals irgendwelche Erläuterungen rund um die Tool-Auflösung.
  • ❌ Zusammenfassung aller 5 Bereitstellungsschritte in einem einzigen Beschreibungsfeld von `TaskCreate`. Wenn `TaskCreate` das verfügbare Planungs-Tool ist, sollten 5 separate `TaskCreate` -Aufrufe nacheinander erfolgen (einer pro Schritt). Siehe references/task-list.md § „Initial TaskCreate calls“ für die wörtliche Vorlage. Gleiche Regel für TodoWrite – ein Aufruf mit allen 5 To-dos im Array „todos:[…] “; niemals ein einzelnes To-do, dessen Inhalt eine mehrzeilige Liste ist.
  • ❌ Stillschweigende Auswahl des dynamischen Stream-Modus. Die Skill-Standardeinstellung ist stream_mode=static – der Agent bindet automatisch erkannte file:// -URLs vor dem Start der App in den [source-list] -Block der DS-Hauptkonfiguration ein. Wechseln Sie nur dann zum dynamischen Modus, wenn der Benutzer ausdrücklich darum bittet („Streams später über REST hinzufügen“, „dynamischen Stream-Modus verwenden“) ODER wenn er in Schritt 2 von „AskQuestion“ den dynamischen Modus auswählt. Die Auswahl des dynamischen Modus für eine generische Abfrage wie „ rtvi-cv mit N Streams bereitstellen“ verstößt gegen die Bereitstellungsrichtlinien und die Erwartungen des Benutzers hinsichtlich der Metriken. Siehe references/pipeline-config.md § „Standardeinstellungen – der Skill befindet sich standardmäßig im statischen Modus“ für die vollständige Begründung.
  • ❌ Eine einzeilige ✔ „App bereit in Ns, N Streams, insgesamt Y fps“ anstelle des Felds „Ergebnisse“ in Schritt 5.
  • ❌ ASCII-Zeichen zum Zeichnen von Kästchen (+, -, =, *) anstelle von hellen Zeichen zum Zeichnen von Kästchen (┌ ─ ┐ │ └ ┘).
  • ❌ Schritt 6 wird unter der Annahme übersprungen, dass „der Benutzer weiß, was als Nächstes zu tun ist“.
  • ❌ Nach Schritt 6 wird eine Markdown-Wand aus Prosa + mehreren Curl- Blöcken + einer abschließenden Frage „Soll ich eines davon ausführen?“ ausgegeben – das ist die Form, auf die der Agent zurückgreift, und dabei werden sowohl das Menü 11.d als auch das Feld pro API-Aufruf umgangen. Der Nutzer wählt aus einem Menü aus; der Skill zeigt das aufgerufene API-Feld an; der Skill führt es aus. Keine Freitext-Frage.
  • ❌ Die Übersicht in Schritt 4 wird ausgeblendet – dies ist durch die Inhaltsregel für Schritt 4 in der Deployment-Dokumentation ausdrücklich verboten:
    • ✔ Batchgröße 3 (Kachelraster: 1×3) → erforderlich: 5 separate Zeilen ([streammux] batch-size=3, [primary-gie] batch-size=3, [source-list] max-batch-size=3, [tiled-display] rows=1, [tiled-display] columns=3).
    • ✔ Ausgabesink „eglsink“ → erforderlich: eine Zeile pro Sink-Schlüssel (4 Schlüssel für „eglsink“, z. B. [sink0] enable=1, type=2, sync=0, qos=0 – die genaue Liste finden Sie in der Datei „apply-config.md“).
    • ✔ Statische Quellen (3 Streams, http-port=9000) → erforderlich: sechs mit Anmerkungen versehene [source-list] -Zeilen.
    • ✔ Kachelraster 1 Zeile × 3 Spalten (einzelne Zeile) → erforderlich: zwei Zeilen, [tiled-display] rows=1 und [tiled-display] columns=3.

Universelles Box-Format

Der Geometrie-Kontrakt für jedes Schritt-Ausgangsfeld (Schritt 1 bis Schritt 5 Ergebnisse). Über alle Felder hinweg gleiche Form; nur der Titel und die Inhaltszeilen ändern sich pro Schritt.

  • Breite: 128 Zeichen von Ecke zu Ecke – ┌ in Spalte 1, ┐ in Spalte 128. Breitere Zeichen lassen den Rahmen linksbündig stehen; dehnen Sie ihn nicht. Der innere Inhaltsbereich beträgt 124 Zeichen (mit einem Leerzeichen-Rand auf jeder Seite innerhalb der │ -Ränder).
  • Nur helle Zeichen zum Zeichnen der Box: ┌ ─ ┐ │ └ ┘. Keine +, -, =, * ASCII-Ersatzzeichen.
  • Oberer Rand – Titel ZENTRIERT: ┌ + N₁ Striche + ␣ + Titel + ␣
    • N₂ Striche + ┐, wobei N₁ + N₂ + len(Titel) + 2 = 126 gilt. Verteilung der Füllzeichen: N₁ = floor((126 − Länge(Titel) − 2) / 2), N₂ = 126 − Länge(Titel) − 2 − N₁. N₁ und N₂ unterscheiden sich um höchstens 1.
  • Hauptteil: ein │ │ pro Tatsache. Jede Faktenzeile verwendet das Format ✔ (zwei Leerzeichen, Glyphe, Schlüssel rechtsbündig auf 13, zwei Leerzeichen, Wert).
  • Leerzeilen zwischen Gruppen: │ <124 spaces> │ zwischen logischen Gruppen (z. B. Identität / Modell / Videos in Schritt 1) einfügen, damit der Benutzer den Rahmen auf einen Blick überblicken kann.
  • Unterer Rand: └ + 126 Striche + ┘ — durchgehender Rand, kein Titel.

Standard-Schrittüberschriften (oben im Feld jedes Schritts):

┌─────────────────────────────────────────────────────── Bereitstellungsziele ───────────────────────────────────────────────────────┐
┌─────────────────────────────────────────────────── Pipeline-Konfiguration ───────────────────────────────────────────────────┐
┌───────────────────────────────────────────────────────── Container ────────────────────────────────────────────────────────────┐
┌──────────────────────────────────────────────────── Konfiguration anwenden ─────────────────────────────────────────────────────┐
┌──────────────────────────────────────────────── Perception-Anwendung — Plan ───────────────────────────────────────────────┐
┌────────────────────────────────────────────── Wahrnehmung – Anwendung – Ergebnisse ──────────────────────────────────────────────┐

Inhaltsregeln pro Schritt (welche Zeilen kommen in welche Box, modusabhängiges Ausblenden von Zeilen, das in Abschnitte unterteilte Layout von „apply-config“, das „Step 5 PLAN-then-RESULT“-Muster Muster, die Anforderung zur Docker-Run-Synthese in Schritt 3) befinden sich in references/deploy-vss-detection-tracking-2d.md unter „Inhaltsregel für Feld in Schritt N“ – lies diese beim Rendern des entsprechenden Schritts.

Schnellauslöser (Mnemonik)

Phrase Ablauf
deploy rtvicv warehouse 2d mit 4 Streams und Anzeige DEPLOY
„smartcity gdino“ auf GPU 1 ausführen DEPLOY
Den Perception-Container anhalten TEARDOWN (Dokument bereitstellen)
rtvi-cv-Zustandsprüfung fehlgeschlagen DEBUG (Dokumentation bereitstellen + Fehlerbehebung)
Füge einen Stream zu rtvi-cv hinzu API-NUTZUNG
Ist rtvi-cv auf localhost:9000 bereit? API-NUTZUNG
rtvi-cv-Metriken abrufen API-NUTZUNG
Text-Embeddings über rtvi-cv generieren API-NUTZUNG

bump:1

Auf GitHub ansehen
---
name: vss-deploy-detection-tracking-2d
description: Deploy, debug, and operate the RTVI-CV 2D detection/tracking microservice and call its REST API for stream management, health checks, and metrics.
license: Apache-2.0
---
## Purpose

Deploy, debug, and operate the RTVI-CV detection / tracking 2D microservice and drive its REST API.

## Prerequisites

- Active VSS deployment reachable on `$HOST_IP` (see `vss-deploy-profile` and `references/`).
- NGC credentials in `$NGC_CLI_API_KEY` and `$NVIDIA_API_KEY` for any image pulls.
- `curl`, `jq`, and Docker available on the caller.

## Instructions

Follow the routing tables and step-by-step workflows below. Each section that ends in *workflow*, *quick start*, or *flow* is intended to be executed top-to-bottom. Detailed reference material lives in `references/` and helper scripts live in `scripts/` — call them via `run_script` when the skill points to a script by name.

## Examples

Worked end-to-end examples are kept under `evals/` (each `*.json` manifest contains a runnable scenario) and inline in the per-workflow `curl` blocks below. Run a Tier-3 evaluation with `nv-base validate <this-skill-dir> --agent-eval` to replay them.

## Limitations

- Requires the matching VSS profile / microservice to be deployed and reachable from the caller.
- NGC-hosted models and NIMs may be subject to rate-limits, GPU memory requirements, and license restrictions.
- Concurrency, GPU memory, and storage limits depend on the host hardware and the profile's compose file.

## Troubleshooting

- **Error**: REST call returns connection refused. **Cause**: target microservice not running. **Solution**: probe `/docs` or `/health`; redeploy via `vss-deploy-profile` or the matching `vss-deploy-*` skill.
- **Error**: HTTP 401/403 from NGC pulls. **Cause**: missing/expired `NGC_CLI_API_KEY`. **Solution**: `docker login nvcr.io` and re-export the key before retrying.
- **Error**: container OOM or model fails to load. **Cause**: insufficient GPU memory for the selected profile. **Solution**: switch to a smaller variant or free GPUs via `docker compose down`.

# RTVI-CV — Detection & Tracking (Unified Skill)

Unified skill for the **Real Time Video Intelligence CV (RTVI-CV)** microservice. Two action surfaces in one skill:

- **Deploy / operate / debug / tear down** the RTVI-CV container locally → see [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md)
- **Call the RTVI-CV REST API** (streams, health, metrics, embeddings) on a running instance → see [`references/usage-vss-detection-tracking-2d.md`](references/usage-vss-detection-tracking-2d.md)

> **Service**: `rtvi-cv` (`metropolis_perception_app`)
> **Image**: `nvcr.io/<org>/<repo>:<tag>` — user-supplied at deploy time
> **REST port**: `9000` (`/api/v1` — `/live`, `/ready`, `/startup`, `/metrics`, `/stream/add`, `/stream/remove`, embeddings)
> **Hardware**: x86/aarch64 dGPU (T4, A100, L40, H100, B200, RTX), SBSA (Spark, Grace-Hopper), Jetson (Thor, Orin, Xavier)

---

## Action routing — pick once per invocation

| User intent (sample phrasing) | Flow | Load this reference |
|-------------------------------|------|---------------------|
| `deploy rtvi-cv warehouse 2d`, `run rtvicv warehouse-3d with 4 streams`, `start smartcity gdino`, `launch perception app`, `bring up sparse4d` | **DEPLOY** | [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md) |
| `stop rtvi-cv`, `tear down`, `kill the perception container`, `cleanup rtvicv-perception-docker` | **TEARDOWN** (handled by deploy doc → "Mode Selection") | [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md) + [`references/teardown-flow.md`](references/teardown-flow.md) |
| `check rtvi-cv logs`, `diagnose rtvi-cv crashing`, `troubleshoot healthcheck failing`, `rtvi-cv won't start` | **DEBUG** | [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md) + [`references/troubleshooting.md`](references/troubleshooting.md) |
| `add a stream`, `remove camera`, `list streams`, `health check`, `is rtvi-cv ready`, `get metrics`, `what's the FPS`, `check GPU usage`, `generate text embeddings`, `call rtvi-cv api` | **API USAGE** | [`references/usage-vss-detection-tracking-2d.md`](references/usage-vss-detection-tracking-2d.md) + [`references/api-reference.md`](references/api-reference.md) |

**Selection rule:** match the user's phrasing against the table above and immediately load the corresponding reference file. Do not mix the flows — DEPLOY assumes no running container yet; API USAGE assumes the container is already running on `http://<host>:9000`.

If intent is genuinely ambiguous (e.g., the user says just "I want to use rtvi-cv"), ask one `AskQuestion`: deploy a new instance, or call an already-running one?

---

## What lives where

```
vss-deploy-detection-tracking-2d/
├── SKILL.md          # this file (routing + contracts)
├── assets/           # data files (deploy-defaults.yml — single source of truth for tags / refs / paths / GPU)
├── evals/            # Tier-3 eval manifests (deploy-evals.json, usage-evals.json)
├── scripts/          # 23 bash + python helpers (see `scripts/` for the full inventory)
└── references/       # workflow runbooks (deploy / api-usage / teardown / troubleshooting / …)
```

For the full per-file inventory and what each reference covers, see
[`references/workflow-reference.md`](references/workflow-reference.md).

All scripts are invoked from the skill root via `$SKILL_DIR/scripts/<name>` — paths inside the deploy reference doc are preserved verbatim and resolve correctly when the agent runs from skill root.

---

## Available Scripts

Helpers live in `scripts/` and are invoked from the skill root by name —
call each via `run_script("scripts/<name>")` so the agent records a
proper tool invocation.

| Script | Purpose | Arguments |
| --- | --- | --- |
| `load_defaults.sh` | Detect platform (x86 dGPU / SBSA / Jetson) and resolve YAML defaults from `assets/deploy-defaults.yml`. | `--usecase <name>` |
| `fetch_resources.sh` | Download + extract NGC resources, scan for layout. | `--ngc-ref <ref>` (optional) |
| `apply_in_container.sh` | Host-side wrapper for Step 4 (`apply_config.sh` inside the running container). | `<container_name>` |
| `apply_config.sh` | In-container path-substitution, batch, sink, sources, engine cache. | `<usecase> <stream_count> <sink_type>` |
| `start_app_in_container.sh` | Host-side wrapper for Step 5 (`run_app_and_wait.sh`). | `<container_name>` |
| `run_app_and_wait.sh` | In-container app launch + readiness + metrics + log. | `<config_path>` |
| `add_streams.sh` / `update_stream_sources.sh` | REST stream lifecycle for Step 6. | `<rtsp_or_file_uri>...` |
| `collect_metrics.sh` | Pull `/api/v1/metrics` snapshot. | none |
| `discover_streams.sh` | Enumerate active streams via `/stream/get-stream-info`. | none |
| `synthesize_docker_run.sh` | Print the platform-correct `docker run` line for the resolved env. | none |
| `render_box.sh` | Render the fixed-width step receipt. | `<step_label>` |
| `calibration_manager.py` | Manage calibration artefacts + per-use-case engine cache invalidation. | `--usecase <name> --reset` |

For the full inventory of helpers (cache, GPU checks, setup) browse
`scripts/`; each script's `--help` describes its arguments.

## How to use this skill

1. **Read this file first.** It only routes — it does not contain workflows.
2. **Match the user's intent** against the routing table above.
3. **Load exactly one reference doc** (DEPLOY or API USAGE). Don't preload both — each reference is large and contains its own full contract.
4. **Follow the loaded reference exactly.** The reference docs are the byte-for-byte preserved contracts from the predecessor skills `vss-deploy-detection-tracking-2d` (deploy/teardown/debug) and `rtvicv-api` (REST API) — every step ordering invariant, bash-batching rule, box-rendering rule, and `AskQuestion` contract is retained.
5. **For DEPLOY**, the reference doc enforces its own startup contract: one-line acknowledgement → planning-tool call (`TodoWrite` array of 5 todos, OR 5 successive `TaskCreate` calls on newer Claude Code) → Step 1 question. Do not narrate, do not pre-flight, and never print "loading TodoWrite/TaskCreate" or any deferred-tool resolution prose — the planning tool is loaded silently.

---

## Output contract — DEPLOY flow

When running the DEPLOY / TEARDOWN / DEBUG flow, the agent MUST honour
all four items below on every successful deploy. These are the user's
only feedback channel between steps; skipping any of them is a
behaviour regression.

1. **Render every step's exit in a fixed-width box** — Step 1 *Deploy
   targets*, Step 2 *Pipeline configuration*, Step 3 *Container*, Step 4
   *Apply configuration*, Step 5 *Plan* + *Results*. Not just the final
   summary. The box is the user's step receipt. Geometry is fixed (see
   § "Universal box format" below). Per-step **content** rules (what
   rows go inside each box) live in [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md)
   under "Step N box content rule".
2. **After the Step 5 Results box, issue the Step 6 `AskUserQuestion`**
   from [`references/next-steps.md`](references/next-steps.md) § "11.c"
   — never replace it with a free-form *Next steps* bullet list. The
   menu is the deploy's exit handle: it lets the user run metrics,
   manage streams, tail logs, or tear down with one click instead of
   having to remember curl URLs.
3. **After the user picks a Step 6 bucket, issue the follow-up
   `AskUserQuestion`** from [`references/next-steps.md`](references/next-steps.md)
   § "11.d" — never substitute prose + ready-to-copy curl examples + a
   free-text "want me to run X?" question. Each bucket has its own
   menu of concrete actions; the user picks the action, then the skill
   emits the API box and runs the curl. Per-bucket follow-ups:
   - **Manage streams** → Add / Remove / List. **Remove builds its
     options dynamically from `/stream/get-stream-info`** — one option
     per active stream labelled `<camera_id> · <camera_url>` plus
     "Remove ALL" when `ACTIVE > 1` (full spec: § "`remove_streams`
     sub-flow").
   - **Stop the deployment** → Stop app / Stop container / Full teardown.
   - **Check metrics & FPS** → no follow-up; run `collect_metrics.sh`
     directly after printing the `/api/v1/metrics` API box.
   - **Check liveness / readiness** → no follow-up; probe all three
     health endpoints after printing their API boxes.
4. **Render the FULL per-step content, not an overview row** —
   rendering the box is necessary but not sufficient. Each step has a
   row composition spec in
   [`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md)
   under "Step N box content rule". **Step 4 (Apply configuration) is
   where the agent collapses most often** — its canonical
   per-use-case key list lives in
   [`references/apply-config.md`](references/apply-config.md)
   § "Per-use-case complete edit list", and the agent MUST emit one
   `✔ [section] key=value  — annotation` row per key in that table for
   the active use case + settings. A section with 5 keys → 5 rows; a
   section with 6 keys → 6 rows. Never one overview row per section.

Forbidden (these are the shortcuts the agent falls back to under
pressure, and they break the user's UX):

- ❌ **Internal tool-loading narration.** Never print "I need to load
  TodoWrite (a deferred tool the skill calls for the task widget)",
  "Loading TaskCreate…", "Calling ToolSearch for the planning tool…",
  or any other text about resolving / loading / fetching deferred tools.
  The agent loads tools **silently**. The user only ever sees the `✔
  <pinned-values>` summary line followed by the widget — never any
  scaffolding around tool resolution.
- ❌ **Collapsing all 5 deploy steps into a single `TaskCreate`'s
  `description` field.** When `TaskCreate` is the available planning
  tool, issue **5 separate `TaskCreate` calls** back-to-back (one per
  step). See `references/task-list.md` § "Initial `TaskCreate` calls"
  for the verbatim template. Same rule for `TodoWrite` — one call with
  all 5 todos in the `todos:[…]` array; never one todo whose `content`
  is a multi-line list.
- ❌ **Silently choosing `dynamic` stream-mode.** The skill default is
  `stream_mode=static` — the agent bakes auto-discovered `file://` URLs
  into the DS main config's `[source-list]` block before app start.
  Switch to `dynamic` only when the user explicitly asks ("add streams
  later via REST", "use dynamic stream mode") OR when they pick `dynamic`
  in the Step 2 AskQuestion. Picking `dynamic` for a generic "deploy
  rtvi-cv with N streams" query breaks the deploy rubric and the
  user's `/metrics` expectations. See
  [`references/pipeline-config.md`](references/pipeline-config.md)
  § "Defaults — the skill is static-mode by default" for the full
  rationale.
- ❌ A one-line `✔ App ready in Ns, N streams, fps total Y` in place of
  the Step 5 Results box.
- ❌ ASCII box-drawing chars (`+`, `-`, `=`, `*`) instead of light
  box-drawing chars (`┌ ─ ┐ │ └ ┘`).
- ❌ Skipping Step 6 on the assumption "the user knows what to do next".
- ❌ After Step 6, dumping a markdown wall of prose + multiple curl
  blocks + a closing "want me to run any of these?" — that's the
  shape the agent falls back to and it bypasses both the 11.d menu
  and the per-API-call box. The user picks from a menu; the skill
  shows the resolved API box; the skill runs it. No free-text Q.
- ❌ Step 4 overview collapses — these are explicitly banned by the
  deploy doc's Step 4 content rule:
    - `✔ Batch size 3 (tile grid: 1×3)` → required: 5 separate rows
      (`[streammux] batch-size=3`, `[primary-gie] batch-size=3`,
      `[source-list] max-batch-size=3`, `[tiled-display] rows=1`,
      `[tiled-display] columns=3`).
    - `✔ Output sink eglsink` → required: one row per sink key
      (4 keys for eglsink, e.g. `[sink0] enable=1`, `type=2`,
      `sync=0`, `qos=0` — read apply-config.md for the exact list).
    - `✔ Sources static (3 streams, http-port=9000)` → required: six
      annotated `[source-list]` rows.
    - `✔ Tile grid 1 row × 3 cols` (single row) → required: two
      rows, `[tiled-display] rows=1` and `[tiled-display] columns=3`.

## Universal box format

The geometry contract for every step-exit box (Step 1 through Step 5
Results). The same shape across every box; only the **title** and the
**body rows** change per step.

- **Width: 128 chars** corner-to-corner — `┌` at column 1, `┐` at
  column 128. Wider terminals leave the box flush-left; do not stretch
  it. Inner content area is **124 chars** (with one space margin on
  each side inside the `│` borders).
- **Light box-drawing chars only**: `┌ ─ ┐ │ └ ┘`. No `+`, `-`, `=`,
  `*` ASCII fallbacks.
- **Top border — title CENTERED**: `┌` + N₁ dashes + `␣` + title + `␣`
  + N₂ dashes + `┐`, where `N₁ + N₂ + len(title) + 2 = 126`. Distribute
  the pad: `N₁ = floor((126 − len(title) − 2) / 2)`,
  `N₂ = 126 − len(title) − 2 − N₁`. N₁ and N₂ differ by at most 1.
- **Body**: one `│ <content padded to inner-content 124> │` per fact.
  Each fact line uses the `  ✔ <key-padded-to-13>  <value>` form (two
  spaces in, glyph, key right-padded to 13, two spaces, value).
- **Blank lines between groups**: render `│ <124 spaces> │` between
  logical groups (e.g. Identity / Model / Videos in Step 1) so the
  user can scan the box at a glance.
- **Bottom border**: `└` + 126 dashes + `┘` — solid border, no title.

Standard step titles (used at the top of each step's box):

```
┌─────────────────────────────────────────────────────── Deploy targets ───────────────────────────────────────────────────────┐
┌─────────────────────────────────────────────────── Pipeline configuration ───────────────────────────────────────────────────┐
┌───────────────────────────────────────────────────────── Container ──────────────────────────────────────────────────────────┐
┌──────────────────────────────────────────────────── Apply configuration ─────────────────────────────────────────────────────┐
┌──────────────────────────────────────────────── Perception Application — Plan ───────────────────────────────────────────────┐
┌────────────────────────────────────────────── Perception Application — Results ──────────────────────────────────────────────┐
```

Per-step content rules (which rows go in which box, mode-aware row
hiding, the apply-config sectioned layout, the Step 5 PLAN-then-RESULT
pattern, the Step 3 `docker run` synthesis requirement) live in
[`references/deploy-vss-detection-tracking-2d.md`](references/deploy-vss-detection-tracking-2d.md)
under "Step N box content rule" — read those when rendering the
corresponding step.

## Quick triggers (mnemonic)

| Phrase | Flow |
|--------|------|
| `deploy rtvicv warehouse 2d with 4 streams and display` | DEPLOY |
| `run smartcity gdino on gpu 1` | DEPLOY |
| `stop the perception container` | TEARDOWN (deploy doc) |
| `rtvi-cv healthcheck failing` | DEBUG (deploy doc + troubleshooting) |
| `add a stream to rtvi-cv` | API USAGE |
| `is rtvi-cv ready on localhost:9000` | API USAGE |
| `get rtvi-cv metrics` | API USAGE |
| `generate text embeddings via rtvi-cv` | API USAGE |

bump:1

Alle Dateien

51 Dateien

vss-deploy-detection-tracking-2d installieren

Laden Sie die Skill-Dateien herunter und entpacken Sie sie in Ihr Verzeichnis „.claude/skills/“.

ZIP herunterladen

Klonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.

git clone https://github.com/NVIDIA/skills/tree/main/skills/vss-deploy-detection-tracking-2d # Copy SKILL.md to your .claude/skills/ directory

Kopieren Kopieren
Schnelle Einrichtung: Kopiere den Skill-Ordner nach .claude/skills/ Claude erkennt den Skill automatisch und nutzt ihn.
Repository NVIDIA/skills

Ähnliche Skills

klingai-upgrade-migration
Zeit aktualisiert 3. Juli 2026
Verification &amp; Quality Assurance
Zeit aktualisiert 29. Juni 2026
base44-cli
Zeit aktualisiert 29. Juni 2026
Railway CLI Management
Zeit aktualisiert 2. Juli 2026
OR