CV / YOLOv8
YOLOv8-pose
reComputer R Series (CM5 + Hailo-10H)
Modelo ligero YOLOv8 nano Pose para despliegue rápido de detección de puntos clave humanos en el borde.
Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.
Primeros pasos
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.mp4Detalles del modelo
reComputer R Series (CM5 + Hailo-10H)YOLOv8 Pose en reComputer R Series (CM5 + Hailo-10H)
YOLOv8 Pose estima keypoints humanos en Hailo-10H mediante HailoRT. El modelo detecta personas, devuelve una caja por persona junto con 17 keypoints COCO, y ofrece vista previa en el navegador, API de imagen única y análisis de vídeo offline.
Esta página está dirigida a reComputer R Series (CM5 + Hailo-10H) con un acelerador PCIe Hailo-10H.
Información del modelo
| Propiedad | Valor |
|---|---|
| Arquitectura | YOLOv8 Pose |
| Tarea | Estimación de pose (cajas de persona + 17 keypoints COCO) |
| Entrada | 640x640x3 RGB (letterbox, normalización compilada en el HEF) |
| Salida | Cabezas de pose sin procesar: caja, score y 17 keypoints COCO por persona (NMS en el host) |
| Clases | 1 (person) |
| HEF (por defecto) | yolov8s_pose.hef, 13.799.424 bytes |
| HEF (mayor) | yolov8m_pose.hef, 29.335.552 bytes |
| Origen del HEF | Hailo Model Zoo v5.4.0, Hailo-10H |
Hailo Model Zoo publica los tamaños s y m para Hailo-10H. Cada tamaño tiene su propia imagen (yolov8s_pose y yolov8m_pose), de modo que la imagen identifica el modelo.
Hardware y configuración del host
| Elemento | Valor |
|---|---|
| Placa | reComputer R Series con Raspberry Pi CM5 |
| Acelerador | Hailo-10H por PCIe, expuesto como /dev/hailo0 |
| Runtime | HailoRT 5.1.1 |
| Python en el contenedor | 3.13, aarch64 |
Instala los paquetes de Hailo-10H en el host y confirma que el driver y el dispositivo están listos antes de iniciar el contenedor:
sudo apt update
sudo apt install hailo-h10-all -y
sudo reboot
# Después de reiniciar
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0Ejecución con el vídeo de demostración
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.mp4Abre http://<Board_IP>:8000 para ver la vista previa: cajas de persona con el esqueleto COCO superpuesto.
Modelo más grande
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.mp4Modo cámara 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étodo | Propósito |
|---|---|---|
/ | GET | Interfaz de vista previa web |
/api/models/yolov8_pose/predict | POST | Cajas de persona y keypoints (JSON) |
/api/video_feed | GET | Stream de vista previa MJPEG |
/api/config | GET / POST | Leer o cambiar umbrales de ejecución |
/api/video/upload | POST | Subir un vídeo de origen |
/api/video/analyze | POST | Iniciar el análisis de vídeo offline |
/api/video/status | GET | Leer el progreso del análisis |
/api/video/download/{filename} | GET | Descargar el resultado anotado |
Los keypoints por debajo del umbral (0.30) se omiten en la respuesta.
Notas de implementación
- El HEF expone las cabezas de pose sin procesar, sin NMS en chip: nueve tensores en tres escalas, cada una con bbox DFL (64 canales), score (1) y keypoints (51).
- La decodificación sigue la cabeza de pose de ultralytics / Model Zoo: sigmoid en los scores, softmax DFL para las distancias de la caja, keypoints como
(2 * raw + grid) * strideen orden(x, y, score); el NMS se ejecuta en el host. - Los valores que ya están en
[0, 1]se conservan como probabilidades; en caso contrario se aplica sigmoid, así que el decodificador sirve para ambas formas compiladas.
Notas de desarrollo
- Módulo fuente:
src/hailo10h_yolov8s_pose/,src/hailo10h_yolov8m_pose/ - Dockerfile:
docker/hailo10h/yolov8s_pose.dockerfile,docker/hailo10h/yolov8m_pose.dockerfile - Contenedor:
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov8s_pose:latest,ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov8m_pose:latest - El módulo usa la API InferModel de HailoRT 5.1.1 y un HEF específico para Hailo-10H.
- Las pruebas unitarias (HailoRT simulado + regresión del post-proceso de pose) se ejecutan sin dispositivo:
python -m unittest discover -s tests -v.