CV / YOLOv8

YOLOv8n_pose

Version légère de la série de détection de points clés humains YOLOv8n_Pose, compacte et hautement efficace, conçue pour l'estimation de pose en temps réel et les tâches de détection de points clés, parfaitement adaptée au déploiement sur l'edge à faible consommation.

539 téléchargements
Taille
~7.4MB
Mémoire
1GB+
Précision
INT8

Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.

Pour commencer

Déployer
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

API REST

Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.

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

Détails du modèle

Demarrage rapide

1. Installer Docker

Executez les commandes suivantes sur la carte de developpement pour installer Docker :

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. Executer le projet (Une commande, apercu Web)

Ce projet prend en charge l'apercu via Navigateur Web. Le programme sert automatiquement une interface web pour la detection en temps reel ou l'analyse video locale.

Etape A : Configurer les permissions d'affichage (Optionnel)

Si vous avez un moniteur connecte et souhaitez voir la fenetre localement :

bash
xhost +local:docker

Etape B : Execution en un clic

Pour 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

Pour 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

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

Note : Si vous souhaitez tester avec une video locale au lieu d'une camera, utilisez le parametre --video :

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

🔌 Documentation de l'API

Ce projet fournit des interfaces RESTful compatibles avec la norme API Ultralytics Cloud, prenant en charge l'estimation de pose via le telechargement d'images, de videos ou l'appel direct de la camera.

1. Interface d'inference du modele (Predict)

Point de terminaison : POST /api/models/yolov8_pose/predict

Parametres de la requete (Multipart/Form-Data) :

  • file : (Optionnel) Fichier image a detecter.
  • video : (Optionnel) Fichier video MP4 a detecter.
  • timestamp : (Optionnel) Horodatage dans le fichier video (secondes), retourne les resultats de detection pour la trame a ce point. La valeur par defaut est 0.
  • realtime : (Optionnel) Booleen. Si true ou si aucun parametre file/video n'est fourni, retourne les resultats de detection pour la trame actuelle de la camera.
  • conf : (Optionnel) Seuil de confiance pour une requete unique, plage 0.0-1.0.
  • iou : (Optionnel) Seuil IOU NMS pour une requete unique, plage 0.0-1.0.

Exemples d'utilisation :

1. Detection d'image :

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

2. Detection de trame video specifique :

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. Obtenir la detection de la trame camera actuelle :

bash
curl -X POST "http://127.0.0.1:8000/api/models/yolov8_pose/predict" -F "realtime=true"
# Or without file parameters
curl -X POST "http://127.0.0.1:8000/api/models/yolov8_pose/predict"

Format de reponse (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. Analyse video locale

  • Telecharger une video : POST /api/video/upload
  • Lister les videos : GET /api/video/list
  • Analyser une video : POST /api/video/analyze
  • Verifier le statut : GET /api/video/status
  • Telecharger le resultat : GET /api/video/download/{filename}

3. Interface de configuration systeme (Config)

Utilisee pour ajuster dynamiquement les seuils pour les flux video en temps reel et l'inference par defaut.

Obtenir la configuration actuelle

  • Point de terminaison : GET /api/config
  • Reponse : {"obj_thresh": 0.25, "nms_thresh": 0.45, "camera_id": 1, "video_path": null}

Mettre a jour la configuration systeme

  • Point de terminaison : POST /api/config
  • Corps de la requete (JSON) : {"obj_thresh": 0.3, "nms_thresh": 0.5}
  • Reponse : {"status": "success"}

4. Interface de flux video en temps reel (Video Feed)

Obtenez un flux video MJPEG en temps reel avec les squelettes de pose dessines, pouvant etre directement integre dans les balises HTML <img>.

  • Point de terminaison : GET /api/video_feed
  • Exemple d'utilisation : <img src="http://<Board_IP>:8000/api/video_feed">

🛠️ Guide du developpeur (Recommandations de production)

Description du code

  • web_detection.py :
    • API Web : Integre FastAPI, prenant en charge la sortie de streaming MJPEG, le telechargement de fichiers et l'analyse video.
    • Inference RKNN : Encapsule l'initialisation RKNN, le chargement du modele et la logique d'inference multi-coeur.
    • Commutation de mode : Gere dynamiquement la mise en page de l'interface utilisateur en fonction des parametres d'entree (--camera_id, --video_path).
  • py_utils/pose_utils.py :
    • Post-traitement : Decodage des boites specifique a YOLOv8-Pose, logique NMS et extraction de points cles.
    • Visualisation : Dessine des boites englobantes et des squelettes de pose avec des couleurs personnalisees.

Modification des modeles

  1. Placez le modele .rknn entraine et converti dans le repertoire model/.
  2. Ajoutez l'argument --model_path a la commande d'execution pour pointer vers le nouveau modele.