CV / YOLOv8
YOLOv8-pose
reComputer R Series (CM5 + Hailo-10H)
Lightweight YOLOv8 nano Pose model for fast edge deployment of human keypoint detection.
Choose the device you're using, the set up guide and documentation will update accordingly.
Getting Started
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.mp4Model Details
reComputer R Series (CM5 + Hailo-10H)YOLOv8 Pose on reComputer R Series (CM5 + Hailo-10H)
YOLOv8 Pose estimates human keypoints on Hailo-10H through HailoRT. The model detects people, returns one box per person together with 17 COCO keypoints, and serves a browser preview, single-image API and offline video analysis.
This page targets reComputer R Series (CM5 + Hailo-10H) with a PCIe Hailo-10H accelerator.
Model Info
| Property | Value |
|---|---|
| Architecture | YOLOv8 Pose |
| Task | Pose estimation (person boxes + 17 COCO keypoints) |
| Input | 640x640x3 RGB (letterbox, normalization compiled into the HEF) |
| Output | Raw pose heads: box, score and 17 COCO keypoints per person (host-side NMS) |
| Classes | 1 (person) |
| HEF (default) | yolov8s_pose.hef, 13,799,424 bytes |
| HEF (larger) | yolov8m_pose.hef, 29,335,552 bytes |
| HEF source | Hailo Model Zoo v5.4.0, Hailo-10H |
Hailo Model Zoo publishes s and m for the Hailo-10H build. Each size ships as its own image (yolov8s_pose and yolov8m_pose), so the pulled image identifies the model.
s is the default here.
Hardware and Host Setup
| Item | Value |
|---|---|
| Board | reComputer R Series with Raspberry Pi CM5 |
| Accelerator | Hailo-10H over PCIe, exposed as /dev/hailo0 |
| Runtime | HailoRT 5.1.1 |
| Python in container | 3.13, aarch64 |
Install the Hailo-10H packages on the host and confirm that the driver and device are ready before starting the container:
sudo apt update
sudo apt install hailo-h10-all -y
sudo reboot
# After reboot
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0Run With Demo Video
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.mp4Open http://<Board_IP>:8000 to view the preview: person boxes with the COCO
skeleton drawn on top.
Larger Model
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.mp4USB Camera Mode
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
Prediction endpoint:
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 | Method | Purpose |
|---|---|---|
/ | GET | Web preview UI |
/api/models/yolov8_pose/predict | POST | Person boxes and keypoints (JSON) |
/api/video_feed | GET | MJPEG preview stream |
/api/config | GET / POST | Read or change runtime thresholds |
/api/video/upload | POST | Upload a source video |
/api/video/analyze | POST | Start offline video analysis |
/api/video/status | GET | Read analysis progress |
/api/video/download/{filename} | GET | Download the annotated result |
Keypoints below the score threshold (0.30) are omitted from the response.
Implementation Notes
- The HEF exposes the raw pose heads, there is no on-chip NMS: nine tensors at three feature-map scales, each with bbox DFL (64 channels), score (1) and keypoints (51).
- Decoding follows the ultralytics / Model Zoo pose head: sigmoid scores, DFL softmax for the box distances, keypoints as
(2 * raw + grid) * stridein(x, y, score)order; NMS runs host-side. - Values already inside
[0, 1]are kept as probabilities, otherwise sigmoid is applied, so the decoder matches either compiled form.
Development Notes
- Source module:
src/hailo10h_yolov8s_pose/,src/hailo10h_yolov8m_pose/ - Dockerfile:
docker/hailo10h/yolov8s_pose.dockerfile,docker/hailo10h/yolov8m_pose.dockerfile - Container:
ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov8s_pose:latest,ghcr.io/seeed-projects/recomputer-hailo10h-cv/yolov8m_pose:latest - The module uses the HailoRT 5.1.1 InferModel API and a Hailo-10H-specific HEF.
- Unit tests (mocked HailoRT + pose post-process regression) run without a
device:
python -m unittest discover -s tests -v.