
Eénhandig kneep-puzzelspel gebaseerd op reComputer-RK / Docker / RKNN / YOLO
Projectoverzicht
Dit project is een pure puzzel van 217 regels: gesture.py detecteert het knijpen → drawing.RectDrawer verzamelt twee rechthoeken → puzzle_game.PuzzleGame schudt ze tot 3×3 → dezelfde toestandsmachine gebruikt het knijpen om de puzzel te slepen.

Snel starten
1. Repo klonen en map betreden
git clone https://github.com/doublelf/puzzle_game
cd puzzle_game2. Afhankelijkheden installeren
pip install -r requirements.txtrequirements.txt legt vier afhankelijkheden vast:
opencv-python>=4.8.0
mediapipe>=0.10.14
numpy>=1.26.0
Pillow>=10.4.03. Spel starten
python main.py # standaard camera 0, horizontale spiegeling ingeschakeld
python main.py --cam 1 # gebruik de 2e camera
python main.py --no-flip # horizontale spiegeling uitschakelen
python main.py --no-landmarks # keypoint-overlay uitschakelen (standaard aan)
python main.py --hide-trails # gebaarsporen uitschakelen (standaard aan)Na het starten ziet u eerst het menuscherm "Pinch-Puzzle"; druk op een willekeurige toets om het spel te betreden.
4. Besturing
| Fase | Spelerinput | Programmareactie |
|---|---|---|
| DRAW | Duim + wijsvinger knijpen, slepen → loslaten om de eerste rechthoek te tekenen | Rechthoek halftransparant groen gevuld, linksboven Draw rectangles: 1/2 |
| DRAW | Herhaal één keer om de tweede rechthoek te tekenen | 2/2 → READY - generating puzzle..., gaat automatisch naar PLAY |
| PLAY | Knijpen om de dichtstbijzijnde puzzeltegel te selecteren (gouden pulserende rand) | Toast Tile #N selected + hint drag toward blank tile |
| PLAY | Vingertop naar een aangrenzende lege tegel slepen | Beide tegels knipperen groen + Toast SWAP!, moves wordt verhoogd |
| PLAY | 9 tegels op hun plaats | 80 regenboogdeeltjes spatten uiteen in het midden + grote Toast SOLVED! |
| Altijd | R herstelt de huidige puzzel | Terug naar de DRAW-fase, rechthoeken gewist |
| Altijd | M terug naar menu | Camera blijft opnemen, alleen de gamslus wordt afgesloten |
| Altijd | ESC afsluiten | Camera vrijgeven, MediaPipe sluiten, venster vernietigen |
Werking zonder camera
recomputer-rk3576-devkit wordt standaard zonder aangesloten USB-camera geleverd. Dit project bundelt drie hulpmiddelen zodat het ook zonder camera end-to-end kan draaien:
tools/verify_all.py — 8-staps verificatiesuite
cd /home/seeed/hand/puzzle_game
python3 -m tools.verify_allPrint elke stap:
- Module-imports (
gesture/drawing/puzzle_game/overlay/utils) utilsgeometrie- en tekst-helpersRectDrawer.update(None)gooit geen uitzonderingshuffle_solvablelevert een geldig bord- Echte MediaPipe Hand Landmarker geladen op aarch64 (XNNPACK-delegate, ~110 ms opwarmtijd)
HandOverlay.add_event+ rendering- Gesynthetiseerde pipeline draait 60 frames zonder fouten
tools/run_synthetic.py — offline renderen naar PNG
python3 -m tools.run_synthetic --frames 180 --out /tmp/puzzle_demo
ls /tmp/puzzle_demo | wc -l # → 180Drijft de volledige PuzzleGame + HandOverlay-pipeline aan en schrijft elk frame naar out/puzzle_XXXX.png. In een camera-loze omgeving de afbeeldingen frame voor frame bekijken met feh / eog / een afbeeldingsviewer, of de PNG's met ffmpeg tot een mp4 samenvoegen:
ffmpeg -framerate 30 -i /tmp/puzzle_demo/puzzle_%04d.png -c:v libx264 -pix_fmt yuv420p puzzle.mp4tools/synthetic_source.py + tools/fake_tracker.py
Een gesynthetiseerde videobron en een gesynthetiseerde HandTracker die interface-equivalent zijn aan cv2.VideoCapture / gesture.HandTracker. Om later op een echte camera over te schakelen, vervangt u eenvoudigweg deze twee regels:
cap = cv2.VideoCapture(args.cam) # vervangt SyntheticHandSource
tracker = HandTracker(num_hands=2) # vervangt SyntheticHandTrackerVervolgens is tools/run_synthetic.py opgewaardeerd tot een echt camerastuurprogramma-script.