inteintegrity2026-09-03

Real-Time Pull-Up Counter on reComputer RK3576

A YOLO11 pose application that uses the RK3576 NPU to detect a person, draw the body skeleton and bounding box, and count pull-ups in real time from video, camera, or RTSP input.

CVPose EstimationFitnessGithub

Real-Time Pull-Up Counter on reComputer RK3576

#1. Solution Overview

This project turns a reComputer RK3576 into a private, low-latency fitness counter. A YOLO11n-Pose model runs on the onboard NPU, while the application draws the detected person, 17 body keypoints, the pose skeleton, the current motion phase, and the completed pull-up count.

Pull-up counting demo on reComputer RK3576

Source code and deployment files: https://github.com/Seeed-Projects/reComputer-AI-Lab-Project/tree/main/rk_project/pullup_counter

#Project Capabilities

  • Runs YOLO11n-Pose inference with RKNNLite on the RK3576 NPU.
  • Detects the main person and renders a bounding box plus COCO-17 pose skeleton.
  • Counts complete pull-up repetitions with a hysteresis state machine.
  • Accepts a bundled video, USB camera, RTSP stream, or another local video.
  • Provides a browser dashboard with count, phase, FPS, NPU latency, pause, and reset controls.
  • Installs into an isolated Python virtual environment with bundled AArch64 wheels.

#Hardware and Software

  • reComputer RK3576 running 64-bit Linux
  • Python 3.11 with venv
  • RKNN Runtime and RKNPU driver supplied by the board image
  • YOLO11n-Pose RKNN model with a fixed 640 × 640 input
  • A computer or phone on the same network for Web preview

The project uses an FP16 RKNN model.

#2. RK3576 Deployment Guide

#Deploy to the Board

Clone the repository and install the environment (one-time setup):

bash
git clone https://github.com/Seeed-Projects/reComputer-AI-Lab-Project.git
cd reComputer-AI-Lab-Project/rk_project/pullup_counter
bash install.sh

#Run

Start the web service:

bash
bash run_web.sh

The installer creates .venv, installs the included AArch64 wheels offline, and performs an environment and one-frame NPU inference check.

When startup completes, open the following address from another device on the same network:

text
http://<RK3576_IP>:8000

For example:

text
http://192.168.3.120:8000

#Input Sources

The default command loops the bundled demonstration video:

bash
bash run_web.sh

Use a USB camera:

bash
bash run_web.sh --source 0

Use an RTSP stream:

bash
bash run_web.sh --source 'rtsp://user:password@camera/stream'

Use another video or Web port:

bash
bash run_web.sh --source /path/to/video.mp4 --port 8080

Only one process should normally use the NPU model at a time. If port 8000 is occupied, stop the older Web process or select another port.

#Command-Line Video Processing

To create an annotated video and a CSV count log without starting the Web interface:

bash
bash run_demo.sh

Default output files:

text
video/output/test_counted.mp4
video/output/test_counted.csv

#3. Counting Logic and Runtime Guidance

The tracker selects the highest-confidence person. Wrist keypoints estimate the pull-up bar level, and the nose and shoulder keypoints describe the athlete's vertical motion. Distances are normalized against body size so the thresholds remain useful at different camera distances.

A two-state counter with separate upper and lower thresholds prevents a person hovering near the boundary from generating duplicate repetitions. A repetition is added only after a stable top position followed by a stable return to the bottom position. Short keypoint dropouts are tolerated, while a prolonged loss resets the motion phase without erasing the completed count.

For reliable results, keep the full upper body visible, use a mostly fixed camera, avoid severe backlighting, and position the camera close to front-on.

#Web Interface and API

The dashboard displays the annotated stream and live statistics. It also exposes:

  • GET /healthz — service health check
  • GET /api/status — current count, motion phase, FPS, and inference state

The service is intended for a trusted local network and does not include authentication or TLS by default.

#Deployment Recommendations

  • Run sha256sum -c MANIFEST.sha256 after copying the project to verify that the model, wheels, and demo files are complete.
  • Keep the RKNN Runtime and RKNPU driver supplied by the board image. Replace them only after confirming compatibility with the RKNN Toolkit version used to build the model.
  • Use the generated .venv instead of installing packages into the system Python environment.
  • Run one inference process per NPU model. If port 8000 is occupied, stop the old process or select another port.
  • Mount the camera firmly, keep the upper body and bar visible, and avoid strong backlighting.
  • Keep the Web interface on a trusted LAN. For long-running or remote deployments, manage it with systemd and add authentication and TLS through a reverse proxy.

#Known Limitations

  • The current implementation follows one primary person.
  • Heavy occlusion of the face, shoulders, or wrists can delay phase transitions.
  • Strong camera movement can reduce counting stability.
  • The Web server is designed for demonstrations on a LAN, not direct exposure to the public Internet.