CV / YOLOv8

YOLOv8n_pose

YOLOv8n_Pose Menselijke Keypoint-detectieserie lichtgewicht versie, compact en zeer efficiënt, op maat gemaakt voor real-time pose-estimatie en keypoint-detectietaken, perfect geschikt voor energiezuinige edge-deployment.

539 downloads
Grootte
~7.4MB
Geheugen
1GB+
Precisie
INT8

Kies het apparaat dat je gebruikt. De installatiehandleiding en documentatie worden dienovereenkomstig bijgewerkt.

Aan de slag

Implementeren
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

Gebruik de REST API om inferentie uit te voeren. Kopieer de onderstaande commando's.

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))

Modeldetails

Snelstart

1. Docker installeren

Voer de volgende commando's uit op het ontwikkelbord om Docker te installeren:

bash
# Download installation script
curl -fsSL https://get.docker.com -o get-docker.sh
# Install using Aliyun mirror source
sudo sh get-docker.sh --mirror Aliyun
# Start Docker and enable auto-start on boot
sudo systemctl enable docker
sudo systemctl start docker

2. Het project uitvoeren (Een commando, webpreview)

Dit project ondersteunt preview via Webbrowser. Het programma biedt automatisch een webinterface voor realtime detectie of lokale video-analyse.

Stap A: Weergaverechten configureren (Optioneel)

Als u een monitor hebt aangesloten en het venster lokaal wilt zien:

bash
xhost +local:docker

Stap B: Uitvoeren met een klik

Voor 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

Voor 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

Benaderen via: http://<Board_IP>:8000

Let op: Als u met een lokale video wilt testen in plaats van een camera, gebruik dan de --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-documentatie

Dit project biedt RESTful-interfaces die compatibel zijn met de Ultralytics Cloud API-standaard, en ondersteunt pose-detectie via afbeelding-, videouploads of directe camera-aanroepen.

1. Modelinferentie-interface (Predict)

Endpoint: POST /api/models/yolov8_pose/predict

Verzoekparameters (Multipart/Form-Data):

  • file: (Optioneel) Afbeeldingsbestand dat moet worden gedetecteerd.
  • video: (Optioneel) MP4-videobestand dat moet worden gedetecteerd.
  • timestamp: (Optioneel) Tijdstempel in het videobestand (seconden), retourneert detectieresultaten voor het frame op dat punt. Standaard is 0.
  • realtime: (Optioneel) Boolean. Indien true of als er geen file/video parameters zijn opgegeven, retourneert detectieresultaten voor het huidige cameraframe.
  • conf: (Optioneel) Betrouwbaarheidsdrempel voor een enkel verzoek, bereik 0.0-1.0.
  • iou: (Optioneel) NMS IOU-drempel voor een enkel verzoek, bereik 0.0-1.0.

Gebruiksvoorbeelden:

1. Afbeeldingsdetectie:

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

2. Detectie specifiek videoframe:

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. Huidig cameraframe detectie ophalen:

bash
curl -X POST "http://127.0.0.1:8000/api/models/yolov8_pose/predict" -F "realtime=true"
# Of zonder bestandsparameters
curl -X POST "http://127.0.0.1:8000/api/models/yolov8_pose/predict"

Responsformaat (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 video-analyse

  • Video uploaden: POST /api/video/upload
  • Video's weergeven: GET /api/video/list
  • Video analyseren: POST /api/video/analyze
  • Status controleren: GET /api/video/status
  • Resultaat downloaden: GET /api/video/download/{filename}

3. Systeemconfiguratie-interface (Config)

Wordt gebruikt om drempels voor realtime videostreams en standaardinferentie dynamisch aan te passen.

Huidige configuratie ophalen

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

Systeemconfiguratie bijwerken

  • Endpoint: POST /api/config
  • Verzoekbody (JSON): {"obj_thresh": 0.3, "nms_thresh": 0.5}
  • Respons: {"status": "success"}

4. Realtime videostream-interface (Video Feed)

Ontvang realtime MJPEG-videostream met pose-skeletten ingetekend, kan direct worden ingesloten in HTML <img>-tags.

  • Endpoint: GET /api/video_feed
  • Gebruiksvoorbeeld: <img src="http://<Board_IP>:8000/api/video_feed">

🛠️ Ontwikkelaarsgids (Productie-aanbevelingen)

Codebeschrijving

  • web_detection.py:
    • Web API: Integreert FastAPI en ondersteunt MJPEG-streaminguitvoer, bestandsuploads en video-analyse.
    • RKNN-inferentie: Omvat RKNN-initialisatie, modelladen en multi-core inferentielogica.
    • Moduswisseling: Verwerkt dynamisch de UI-layout op basis van invoerparameters (--camera_id, --video_path).
  • py_utils/pose_utils.py:
    • Nabewerking: YOLOv8-Pose specifieke Box-decodering, NMS-logica en Keypoint-extractie.
    • Visualisatie: Tekent bounding boxes en pose-skeletten met aangepaste kleuren.

Modellen wijzigen

  1. Plaats het getrainde en geconverteerde .rknn-model in de model/-directory.
  2. Voeg het --model_path-argument toe aan het uitvoercommando om naar het nieuwe model te verwijzen.