CV / YOLOv8
YOLOv8-pose
reComputer R Series (CM5 + Hailo-10H)
Modèle YOLOv8 nano Pose léger pour un déploiement rapide de détection de points clés humains sur l'edge.
Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.
Pour commencer
sudo docker run --rm \
--name cm5-hailo10h-yolov8s-pose \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov8s_pose:latest \
python web_detection.py --model_path model/yolov8s_pose.hef --video_path video/test.mp4Détails du modèle
reComputer R Series (CM5 + Hailo-10H)YOLOv8 Pose sur reComputer R Series (CM5 + Hailo-10H)
YOLOv8 Pose estime les keypoints humains sur Hailo-10H via HailoRT. Le modèle détecte les personnes, renvoie une boîte par personne avec 17 keypoints COCO, et fournit un aperçu navigateur, une API image unique et l'analyse vidéo hors ligne.
Cette page cible reComputer R Series (CM5 + Hailo-10H) avec un accélérateur PCIe Hailo-10H.
Informations du modèle
| Propriété | Valeur |
|---|---|
| Architecture | YOLOv8 Pose |
| Tâche | Estimation de pose (boîtes de personne + 17 keypoints COCO) |
| Entrée | 640x640x3 RGB (letterbox, normalisation compilée dans le HEF) |
| Sortie | Têtes de pose brutes : boîte, score et 17 keypoints COCO par personne (NMS côté hôte) |
| Classes | 1 (person) |
| HEF (par défaut) | yolov8s_pose.hef, 13 799 424 octets |
| HEF (plus grand) | yolov8m_pose.hef, 29 335 552 octets |
| Source du HEF | Hailo Model Zoo v5.4.0, Hailo-10H |
Hailo Model Zoo publie les tailles s et m pour Hailo-10H. Chaque taille dispose de sa propre image (yolov8s_pose et yolov8m_pose) : l'image identifie donc le modèle.
Matériel et configuration de l'hôte
| Élément | Valeur |
|---|---|
| Carte | reComputer R Series avec Raspberry Pi CM5 |
| Accélérateur | Hailo-10H via PCIe, exposé comme /dev/hailo0 |
| Runtime | HailoRT 5.1.1 |
| Python dans le conteneur | 3.13, aarch64 |
Installez les paquets Hailo-10H sur l'hôte et vérifiez que le pilote et le périphérique sont prêts avant de démarrer le conteneur :
sudo apt update
sudo apt install hailo-h10-all -y
sudo reboot
# Après redémarrage
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0Exécution avec la vidéo de démonstration
sudo docker run --rm \
--name cm5-hailo10h-yolov8s-pose \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov8s_pose:latest \
python web_detection.py --model_path model/yolov8s_pose.hef --video_path video/test.mp4Ouvrez http://<Board_IP>:8000 pour afficher l'aperçu : boîtes de personne avec le squelette COCO superposé.
Modèle plus grand
sudo docker run --rm \
--name cm5-hailo10h-yolov8m-pose \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov8m_pose:latest \
python web_detection.py --model_path model/yolov8m_pose.hef --video_path video/test.mp4Mode caméra USB
sudo docker run --rm \
--name cm5-hailo10h-yolov8s-pose \
--privileged \
--net=host \
-e PYTHONUNBUFFERED=1 \
--device /dev/hailo0:/dev/hailo0 \
--device /dev/video0:/dev/video0 \
-v /usr/lib/libhailort.so.5.1.1:/usr/lib/libhailort.so.5.1.1:ro \
-v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov8s_pose:latest \
python web_detection.py --model_path model/yolov8s_pose.hef --camera_id 0REST API
POST http://<Board_IP>:8000/api/models/yolov8_pose/predictcurl -X POST "http://<Board_IP>:8000/api/models/yolov8_pose/predict" \
-F "file=@test.jpg"{
"success": true,
"source": "uploaded image",
"predictions": [
{
"class": "person",
"confidence": 0.91,
"box": {"x1": 120, "y1": 80, "x2": 360, "y2": 520},
"keypoints": [{"x": 180, "y": 120, "score": 0.87}]
}
],
"image": {"width": 1280, "height": 720}
}| Endpoint | Méthode | Rôle |
|---|---|---|
/ | GET | Interface d'aperçu web |
/api/models/yolov8_pose/predict | POST | Boîtes de personne et keypoints (JSON) |
/api/video_feed | GET | Flux d'aperçu MJPEG |
/api/config | GET / POST | Lire ou modifier les seuils d'exécution |
/api/video/upload | POST | Téléverser une vidéo source |
/api/video/analyze | POST | Lancer l'analyse vidéo hors ligne |
/api/video/status | GET | Lire la progression de l'analyse |
/api/video/download/{filename} | GET | Télécharger le résultat annoté |
Les keypoints sous le seuil (0,30) sont omis de la réponse.
Notes d'implémentation
- Le HEF expose les têtes de pose brutes, sans NMS embarqué : neuf tenseurs sur trois échelles, chacune avec bbox DFL (64 canaux), score (1) et keypoints (51).
- Le décodage suit la tête de pose ultralytics / Model Zoo : sigmoid sur les scores, softmax DFL pour les distances de boîte, keypoints en
(2 * raw + grid) * strideau format(x, y, score); le NMS est exécuté côté hôte. - Les valeurs déjà dans
[0, 1]sont conservées comme probabilités, sinon sigmoid est appliqué : le décodeur couvre donc les deux formes compilées.
Notes de développement
- Module source :
src/hailo10h_yolov8s_pose/,src/hailo10h_yolov8m_pose/ - Dockerfile :
docker/hailo10h/yolov8s_pose.dockerfile,docker/hailo10h/yolov8m_pose.dockerfile - Conteneur :
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov8s_pose:latest,ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov8m_pose:latest - Le module utilise l'API InferModel de HailoRT 5.1.1 et un HEF dédié à Hailo-10H.
- Les tests unitaires (HailoRT simulé + régression du post-traitement de pose) s'exécutent sans appareil :
python -m unittest discover -s tests -v.