CV / YOLOv8

YOLOv8n_pose

YOLOv8n_Pose menschliche Schlüsselpunkterkennungsserie Leichtversion, kompakt und hocheffizient, zugeschnitten auf Echtzeit-Posenschätzung und Schlüsselpunkterkennung, perfekt geeignet für energieeffiziente Edge-Bereitstellung.

539 Downloads
Größe
~7.4MB
Speicher
1GB+
Präzision
INT8

Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.

Erste Schritte

Deploy
sudo docker run --rm \
  --name rk3588-yolov8n-pose \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  --device /dev/video1:/dev/video1 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-yolov8_pose:latest \
  python3 web_detection.py --model_path model/yolov8n_pose.rknn --video video/test.mp4

REST API

Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.

Curl
curl -X POST "http://127.0.0.1:8000/api/models/yolov8n_obb/predict" -F "realtime=true"
# Or without file parameters
curl -X POST "http://127.0.0.1:8000/api/models/yolov8_pose/predict"
Python
import requests
import json
resp = requests.post(
    "http://127.0.0.1:8000/api/models/yolov8_pose/predict",
    json={},
    timeout=30
)
result = resp.json()
print(json.dumps(result, indent=2, ensure_ascii=False))

Modelldetails

Schnellstart

1. Docker installieren

Fuehren Sie die folgenden Befehle auf dem Entwicklungsboard aus, um Docker zu installieren:

bash
# Installationsskript herunterladen
curl -fsSL https://get.docker.com -o get-docker.sh
# Mit Aliyun-Mirror-Source installieren
sudo sh get-docker.sh --mirror Aliyun
# Docker starten und Autostart beim Booten aktivieren
sudo systemctl enable docker
sudo systemctl start docker

2. Projekt ausfuehren (Ein Befehl, Web-Vorschau)

Dieses Projekt unterstuetzt die Vorschau ueber Web-Browser. Das Programm stellt automatisch eine Weboberflaeche fuer Echtzeit-Erkennung oder lokale Videoanalyse bereit.

Schritt A: Anzeigeberechtigungen konfigurieren (Optional)

Wenn Sie einen Monitor angeschlossen haben und das Fenster lokal sehen moechten:

bash
xhost +local:docker

Schritt B: Mit einem Klick ausfuehren

Fuer RK3588:

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  --device /dev/video1:/dev/video1 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-yolov8_pose:latest \
  python3 web_detection.py --model_path model/yolov8n_pose.rknn --video video/test.mp4

Fuer RK3576:

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    --device /dev/video1:/dev/video1 \
    --device /dev/dri/renderD129:/dev/dri/renderD129 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-yolov8_pose:latest \
    python3 web_detection.py --model_path model/yolov8n_pose.rknn --video video/test.mp4

Zugriff ueber: http://<Board_IP>:8000

Hinweis: Wenn Sie mit einem lokalen Video anstelle einer Kamera testen moechten, verwenden Sie den --video-Parameter:

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    -v $(pwd)/video:/app/video \
    --device /dev/dri/renderD129:/dev/dri/renderD129 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-yolov8-pose:latest \
    python3 web_detection.py --model_path model/yolov8n_pose.rknn --video video/test.mp4

🔌 API-Dokumentation

Dieses Projekt bietet RESTful-Schnittstellen, die mit dem Ultralytics Cloud API-Standard kompatibel sind und Pose-Schaetzung ueber Bild-, Video-Uploads oder direkte Kameraaufrufe unterstuetzen.

1. Modellinferenzschnittstelle (Predict)

Endpunkt: POST /api/models/yolov8_pose/predict

Anfrageparameter (Multipart/Form-Data):

  • file: (Optional) Zu erkennende Bilddatei.
  • video: (Optional) Zu erkennende MP4-Videodatei.
  • timestamp: (Optional) Zeitstempel in der Videodatei (Sekunden), gibt Erkennungsergebnisse fuer den Frame zu diesem Zeitpunkt zurueck. Standard ist 0.
  • realtime: (Optional) Boolean. Wenn true oder wenn keine file/video-Parameter angegeben sind, werden Erkennungsergebnisse fuer den aktuellen Kameraframe zurueckgegeben.
  • conf: (Optional) Konfidenzschwellenwert fuer eine einzelne Anfrage, Bereich 0,0-1,0.
  • iou: (Optional) NMS-IOU-Schwellenwert fuer eine einzelne Anfrage, Bereich 0,0-1,0.

Verwendungsbeispiele:

1. Bilderkennung:

bash
curl -X POST "http://127.0.0.1:8000/api/models/yolov8_pose/predict" -F "file=@/home/cat/001.jpg"

2. Erkennung eines bestimmten Videoframes:

bash
curl -X POST "http://127.0.0.1:8000/api/models/yolov8_pose/predict" -F "video=@/home/cat/test.mp4" -F "timestamp=5.5"

3. Aktuellen Kameraframe erkennen:

bash
curl -X POST "http://127.0.0.1:8000/api/models/yolov8_pose/predict" -F "realtime=true"
# Oder ohne Dateiparameter
curl -X POST "http://127.0.0.1:8000/api/models/yolov8_pose/predict"

Antwortformat (JSON):

json
{
  "success": true,
  "source": "video frame at 5.5s",
  "predictions": [
    {
      "class": "person",
      "confidence": 0.92,
      "box": { "x1": 100, "y1": 200, "x2": 300, "y2": 500 },
      "keypoints": [
        { "x": 150.5, "y": 210.2, "conf": 0.88 },
        { "x": 160.1, "y": 205.5, "conf": 0.91 },
        { "x": 140.2, "y": 206.1, "conf": 0.85 },
        { "x": 170.8, "y": 215.3, "conf": 0.89 },
        { "x": 130.4, "y": 218.7, "conf": 0.82 },
        { "x": 180.2, "y": 250.4, "conf": 0.95 },
        { "x": 120.5, "y": 255.1, "conf": 0.93 },
        { "x": 190.6, "y": 300.2, "conf": 0.87 },
        { "x": 110.3, "y": 305.8, "conf": 0.86 },
        { "x": 200.1, "y": 350.5, "conf": 0.81 },
        { "x": 100.9, "y": 355.2, "conf": 0.80 },
        { "x": 175.4, "y": 400.1, "conf": 0.90 },
        { "x": 125.6, "y": 405.3, "conf": 0.88 },
        { "x": 185.2, "y": 450.6, "conf": 0.85 },
        { "x": 115.8, "y": 455.4, "conf": 0.84 },
        { "x": 195.7, "y": 500.2, "conf": 0.79 },
        { "x": 105.3, "y": 505.7, "conf": 0.78 }
      ]
    }
  ],
  "image": { "width": 1280, "height": 720 }
}

2. Lokale Videoanalyse

  • Video hochladen: POST /api/video/upload
  • Videos auflisten: GET /api/video/list
  • Video analysieren: POST /api/video/analyze
  • Status pruefen: GET /api/video/status
  • Ergebnis herunterladen: GET /api/video/download/{filename}

3. Systemkonfigurationsschnittstelle (Config)

Wird verwendet, um Schwellenwerte fuer Echtzeit-Videostreams und Standardinferenz dynamisch anzupassen.

Aktuelle Konfiguration abrufen

  • Endpunkt: GET /api/config
  • Antwort: {"obj_thresh": 0.25, "nms_thresh": 0.45, "camera_id": 1, "video_path": null}

Systemkonfiguration aktualisieren

  • Endpunkt: POST /api/config
  • Anfrage-Body (JSON): {"obj_thresh": 0.3, "nms_thresh": 0.5}
  • Antwort: {"status": "success"}

4. Echtzeit-Videostream-Schnittstelle (Video Feed)

Echtzeit-MJPEG-Videostream mit eingezeichneten Pose-Skeletten abrufen, kann direkt in HTML <img>-Tags eingebettet werden.

  • Endpunkt: GET /api/video_feed
  • Verwendungsbeispiel: <img src="http://<Board_IP>:8000/api/video_feed">

🛠️ Entwicklerhandbuch (Produktionsempfehlungen)

Codebeschreibung

  • web_detection.py:
    • Web-API: Integriert FastAPI und unterstuetzt MJPEG-Streaming-Ausgabe, Datei-Upload und Videoanalyse.
    • RKNN-Inferenz: Kapselt RKNN-Initialisierung, Modellladung und Multi-Core-Inferenzlogik.
    • Modusumschaltung: Behandelt dynamisch das UI-Layout basierend auf Eingabeparametern (--camera_id, --video_path).
  • py_utils/pose_utils.py:
    • Nachbearbeitung: YOLOv8-Pose-spezifische Box-Dekodierung, NMS-Logik und Keypoint-Extraktion.
    • Visualisierung: Zeichnet Bounding-Boxen und Pose-Skelette mit angepassten Farben.

Modelle aendern

  1. Legen Sie das trainierte und konvertierte .rknn-Modell im model/-Verzeichnis ab.
  2. Fuegen Sie das --model_path-Argument zum Ausfuehrungsbefehl hinzu, um auf das neue Modell zu verweisen.