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.

802 descargas
Tamaño
10.10 MB
Memoria
4GB+
Precisión
INT8

Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.

Primeros pasos

Desplegar
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.mp4

Detalles 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

PropiedadValor
ArquitecturaYOLOv8 Pose
TareaEstimación de pose (cajas de persona + 17 keypoints COCO)
Entrada640x640x3 RGB (letterbox, normalización compilada en el HEF)
SalidaCabezas de pose sin procesar: caja, score y 17 keypoints COCO por persona (NMS en el host)
Clases1 (person)
HEF (por defecto)yolov8s_pose.hef, 13.799.424 bytes
HEF (mayor)yolov8m_pose.hef, 29.335.552 bytes
Origen del HEFHailo 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

ElementoValor
PlacareComputer R Series con Raspberry Pi CM5
AceleradorHailo-10H por PCIe, expuesto como /dev/hailo0
RuntimeHailoRT 5.1.1
Python en el contenedor3.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:

bash
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/hailo0

Ejecución con el vídeo de demostración

bash
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.mp4

Abre http://<Board_IP>:8000 para ver la vista previa: cajas de persona con el esqueleto COCO superpuesto.

Modelo más grande

bash
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.mp4

Modo cámara USB

bash
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 0

REST API

text
POST http://<Board_IP>:8000/api/models/yolov8_pose/predict
bash
curl -X POST "http://<Board_IP>:8000/api/models/yolov8_pose/predict" \
  -F "file=@test.jpg"
json
{
  "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}
}
EndpointMétodoPropósito
/GETInterfaz de vista previa web
/api/models/yolov8_pose/predictPOSTCajas de persona y keypoints (JSON)
/api/video_feedGETStream de vista previa MJPEG
/api/configGET / POSTLeer o cambiar umbrales de ejecución
/api/video/uploadPOSTSubir un vídeo de origen
/api/video/analyzePOSTIniciar el análisis de vídeo offline
/api/video/statusGETLeer el progreso del análisis
/api/video/download/{filename}GETDescargar 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) * stride en 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.