William Zhang2026-09-22

3D-houdingsschattingssysteem met reComputer RK3576

Op de RK3576 is een systeem uitgerold voor het vastleggen van menselijke gewrichtspunten en voetbalbewegingspaden, en voor 3D-reconstructie tijdens het dribbelen. Met behulp van YOLOv8n, YOLOv8n-pose en Matplotlib voor het tekenen van demonstratiegrafieken, wordt het vastleggen en weergeven van menselijke houding en voetbalbewegingstrajectorieën gerealiseerd.

CVPose EstimationObject DetectionGithub

Een 3D-houdingsschattingssysteem gebaseerd op RK3576 / RKNN / YOLO / Pose Estimation

U kunt het project bekijken op GitHub: https://github.com/doublelf/3D-Human-Pose-Estimation/tree/main

Een YOLOv8 objectdetectie- + pose-estimation-pipeline, geoptimaliseerd voor de reComputer RK3576. Dit project is ontwikkeld op basis van de basisalgoritmen van het reComputer AI Lab-platform, waarbij de oorspronkelijke inference-backend en scheduling-logica zijn vervangen om rekentaken te verdelen over de heterogene rekeneenheden van de RK3576:

RekeneenheidTaak
NPU 0+1YOLOv8n objectdetectie met 80 klassen (modelbestand yolov8n.rknn)
NPU 2YOLOv8n-pose pose-estimation met 17 keypoints (modelbestand yolov8n_pose.rknn)
VPUH.264 hardwarecodec via ffmpeg h264_rkmpp
CPULetterbox-voorbewerking, DFL/NMS-nabewerking en frame-rendering

Repository-indeling

Code
ceshi_rk3576/
├── README.md
├── pyproject.toml
├── requirements.txt
├── Dockerfile
├── configs/
│   └── default.yaml
├── data/
│   ├── inputs/                # Invoervideobronnen
│   ├── outputs/               # Uitvoermap voor resultaten
│   └── weights/               # Modelgewichten: yolov8n.rknn, yolov8n_pose.rknn
├── src/poseball/
│   ├── __init__.py
│   ├── __main__.py
│   ├── cli.py                 # Opdrachtregel-ingangspunt
│   ├── config.py              # YAML-gebaseerd configuratiebeheer
│   ├── rknn_engine.py         # NPU-inference-wrapper
│   ├── vpu_codec.py           # VPU-codec via ffmpeg-subproces
│   ├── models.py              # Handige modellader
│   ├── preprocess.py          # Letterbox-verwerking + BGR-naar-RGB-conversie
│   ├── postprocess.py         # DFL/NMS + herstel van Letterbox-coördinaten
│   ├── video.py               # VPU / cv2 video lees-/schrijfmodule
│   ├── hw_scheduler.py        # Multi-threaded pipelineplanner (CPU/NPU/VPU)
│   ├── pipeline.py            # High-level bedrijfsorkestratie
│   ├── geometry.py            # Point / Rect / Detection gegevensklassen
│   ├── io_utils.py            # JSON- en bestandsysteem-hulpprogramma's
│   └── _compat.py             # NumPy-compatibiliteitsadapter
├── src/py_utils/
│   ├── __init__.py
│   ├── yolov8_utils.py        # Objectdetectie-nabewerking (afkomstig van ballo-project)
│   └── pose_utils.py          # Pose-estimation-nabewerking (afkomstig van ball-project)
└── tests/
    ├── test_rknn_engine.py
    ├── test_vpu_codec.py
    ├── test_postprocess.py
    └── test_hw_scheduler.py

Installatie op de reComputer RK3576

Optie 1: Installeren vanaf GitHub

Project ophalen

bash
git clone https://github.com/doublelf/3D-Human-Pose-Estimation.git && cd 3D-Human-Pose-Estimation

Omgeving instellen

bash
# 1. Maak een virtuele omgeving aan
python3 -m venv venv
source venv/bin/activate

# 2. Installeer dit pakket en de vereiste afhankelijkheden
pip install -e .
pip install -r requirements.txt

# 3. Installeer rknn-toolkit-lite2 voor de bijbehorende Python-versie (alleen aarch64)
cd RKNN-Toolkit/
pip3 install rknn_toolkit_lite2-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Gebruik

bash
# Voer een volledige hardware-diagnose uit (aanbevolen bij eerste gebruik van een nieuw apparaat)
ceshi_rk3576 doctor

# Geef gedetecteerde hardware-mogelijkheden weer
ceshi_rk3576 info

# Smoke-test met één frame
ceshi_rk3576 smoke --input data/inputs/sample.mp4

# End-to-end-pipeline met één camera (objectdetectie + pose-estimation + baldetectie)
ceshi_rk3576 infer \
    --config configs/default.yaml \
    --input  data/inputs/sample.mp4 \
    --output data/outputs/annotated.mp4 \
    --json   data/outputs/detections.json

# Dual-camera pipeline (hoofdtestopdracht)
ceshi_rk3576 dual-infer \
    --input-a  data/inputs/sample-a.mp4 \
    --input-b  data/inputs/sample-b.mp4 \
    --output-a data/outputs/annotated-a.mp4 \
    --output-b data/outputs/annotated-b.mp4 \
    --json-a   data/outputs/detections-a.json \
    --json-b   data/outputs/detections-b.json

# Genereer een pseudo-3D-animatie-MP4 met matplotlib op basis van JSON-resultaten
ceshi_rk3576 render \
    --json-a     data/outputs/detections-a.json \
    --output     data/outputs/3d.mp4 \
    --depth-mode lr

Optie 2: Installeren met Docker

Project ophalen + in één stap uitvoeren

Image ophalen

bash
sudo docker pull ghcr.io/doublelf/3d_human_pose_estimation:v1.0

Dual-camera pipeline uitvoeren

bash
sudo docker run --rm --privileged --net=host   -e PYTHONUNBUFFERED=1 \
  --device /dev/video1:/dev/video1 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  -v $(pwd)/data/inputs:/app/data/inputs \
  -v $(pwd)/data/weights:/app/data/weights \
  -v $(pwd)/data/outputs:/app/data/outputs \
  -v $(pwd)/configs:/app/configs \
  ghcr.io/doublelf/3d_human_pose_estimation:v1.0 \
  ceshi_rk3576 dual-infer --input-a  data/inputs/sample-a.mp4 --input-b  data/inputs/sample-b.mp4 --output-a data/outputs/annotated-a.mp4 --output-b data/outputs/annotated-b.mp4 --json-a   data/outputs/detections-a.json --json-b   data/outputs/detections-b.json

Pseudo-3D-animatie-MP4 met matplotlib genereren op basis van JSON-resultaten

bash
sudo docker run --rm --privileged --net=host   -e PYTHONUNBUFFERED=1 \
  --device /dev/video1:/dev/video1 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  -v $(pwd)/data/inputs:/app/data/inputs \
  -v $(pwd)/data/weights:/app/data/weights \
  -v $(pwd)/data/outputs:/app/data/outputs \
  -v $(pwd)/configs:/app/configs \
  ghcr.io/doublelf/3d_human_pose_estimation:v1.0 \
  ceshi_rk3576 render --json-a data/outputs/detections-a.json --output data/outputs/3d.mp4 --depth-mode lr

Beschrijving van uitvoerbestanden

BestandInhoud
annotated*.mp4Origineel frame + bounding boxes + skelet met 17 keypoints + rode cirkel voor de sportbal (COCO-klasse 32)
detections*.jsonPer-frame gegevens: detections (alle 80 COCO-klassen), poses (bbox + 17 keypoints met betrouwbaarheid), ball_xy (centrum van de beste bal-bbox)
3d.mp4Met matplotlib gerenderd pseudo-3D-skelet + balbaan + trajecten van linker- en rechterenkel, per frame roterend (depth_mode=lr); rendert uitsluitend gegevens van camera A

Het render-commando leest de JSON-bestanden die door infer of dual-infer zijn gegenereerd — de twee fasen zijn onafhankelijk. U kunt render eenvoudig opnieuw uitvoeren om de uitvoergrootte, framesnelheid of depth-modus aan te passen, zonder de video opnieuw op de NPU te verwerken.

Hardware-taakverdeling

RK3576 NPU-topologie

De RK3576 SoC beschikt over slechts twee NPU-cores (core 0 en core 1). We koppelen elk model aan een andere core, zodat ze parallel kunnen draaien zonder om dezelfde hardware te concurreren:

ModelStandaard core_mask-configuratieFysieke core
YOLOv8n-detectorNPU_CORE_0 (0x01)Core 0
YOLOv8n-pose-modelNPU_CORE_1 (0x02)Core 1

De vorige standaardconfiguratie (detector met NPU_CORE_0_1 en pose-model met NPU_CORE_2) was onjuist: het RKNN-stuurprogramma wijst NPU_CORE_2 stilzwijgend opnieuw toe aan NPU_CORE_0 en geeft een waarschuwing bij het laden. Met die configuratie zouden beide modellen om de cores 0+1 strijden.