name: snakeview-pose-pipeline
description: "Pose-Detection-Pipeline auf snakeview â playbooks/pose.yml + files/pose_export.py, Gotchas"
metadata:
node_type: memory
type: project
originSessionId: 4ce7fd9b-8ce6-4952-a2eb-b3157d1cc404
Video â Bewegungsdaten auf snakeview (Hailo-8, yolov8m_pose):
ansible-playbook playbooks/pose.yml [-e video_src=/pfad/clip.mp4]
Fluss: lokales Video â snakeview:/home/sysop/pose/import/ â Hailo â export/
(annotiertes _pose.mkv + .json mit 17 COCO-Keypoints pro Person pro Frame,
normalisiert x/y 0â1 + Pixel px/py + track_id/confidence/bbox). JSON wird nach
tmp/snakeview/export/ zurĂŒckgeholt.
Das Herz ist playbooks/files/pose_export.py â eine headless Variante der
hailo-rpi5-examples Pose-App. Vier Gotchas, die es zum Laufen brauchte:
- Datei-Loop: Basis-App spult Dateiquellen bei EOS zurĂŒck (Endlos-Demo).
on_eos()ĂŒberschreiben âshutdown()= Single-Pass. Sonst nie EOS, kein JSON,
und DMA-Warning-Flut (siehe [[snakeview-hailo-dkms-kernel]]). - run() ruft sys.exit(0) im Erfolgsfall â Code NACH app.run() lĂ€uft nie.
JSON darum in on_eos() schreiben (dump_json), nicht nach run(). - Headless-Output: statt DISPLAY_PIPELINE (autovideosink) â
OVERLAY_PIPELINE + FILE_SINK_PIPELINE (x264enc/matroskamux/filesink). - x264enc fehlt:
gstreamer1.0-plugins-uglynötig (Pi 5 hat KEINEN
HW-H264-Encoder â Software-x264, CPU-Last ~5). Playbook installiert es.
MKV-Header danach mit ffmpeg remuxen (-c copy).
AusfĂŒhrung im venv nach source setup_env.sh (bash, nicht dash â shell-Task
mit executable:/bin/bash). HEF explizit per --hef-path pinnen (current_path der
App zeigt in site-packages, nicht auf hailo-rpi5-examples/resources).
Verifiziert 2026-07-14: 1400 Frames / 910 Detektionen, 0 neue dmesg-Warnings.
Viewer: playbooks/files/pose_viewer.html â JSON-getrieben (zeichnet das
Skelett selbst aus den Keypoints, nicht das gebackene Overlay). Playbook legt
ihn + pose-data.js neben das Video. Daten als window.POSE einbetten, weil
fetch() unter file:// an CORS scheitert. Videoname wird aus POSE.source
abgeleitet, fps aus frame_count/video.duration â fĂŒr jeden Clip nutzbar.
Datenschutz siehe [[crumbforest-passkante-bewegungsdaten]] â nur das Werkzeug
wandert ins git, Video und Pose-Daten bleiben lokal unter tmp/ (gitignored).