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.
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 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.mp4API REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
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"
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 :
# 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 docker2. 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 :
xhost +local:dockerEtape B : Execution en un clic
Pour RK3588 :
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.mp4Pour RK3576 :
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.mp4Acces via : http://<Board_IP>:8000
Note : Si vous souhaitez tester avec une video locale au lieu d'une camera, utilisez le parametre
--video:
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. Sitrueou si aucun parametrefile/videon'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 :
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 :
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 :
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) :
{
"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
- Placez le modele .rknn entraine et converti dans le repertoire
model/. - Ajoutez l'argument
--model_patha la commande d'execution pour pointer vers le nouveau modele.