Visuele filter-demo gebaseerd op reComputer-RK / Docker / RKNN / YOLO

Projectoverzicht
Dit project bundelt 9 filters in één FILTER_LIST-woordenboek voor eenvoudige uitbreiding — wat een 191-regelig, louter-filter studio oplevert: gesture.py detecteert beidshands-knijpen → filter_game.FilterGame beheert de vierhoekige hoekpunten → filters.apply_filter verwerkt de ROI-pixels.

Snel starten
1. Repo klonen en map betreden
git clone https://github.com/doublelf/filter_game
cd filter_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.0Van de 9 filters worden EMBOSS / CONTOUR / POSTERIZE geleverd door Pillow; INVERT / NEON / GRAY / SEPIA / HUE_SHIFT / PIXELATE zijn geïmplementeerd met OpenCV + NumPy en werken ook zonder Pillow (ze geven dan het originele frame terug, zie
filters.py:36_pil_filter_safe).
3. 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 "Filter Studio"; druk op een willekeurige toets om het spel te betreden.
4. Besturing
| Actie | Spelerinput | Programmareactie |
|---|---|---|
| Eénhandige kneep | Willekeurige hand begint te knijpen | Goudkleurige spreidingsring aan de wijsvingertop |
| Beidshands kneep | Beide handen knijpen tegelijk | Spreidingsring op het middelpunt tussen de twee ankers + Toast CONNECTED |
| Kneep vasthouden + bewegen | Beide handen slepen | Vierhoek (anchor_l, anchor_r, current_l, current_r), met het huidige filter toegepast op de binnenste pixels |
| Een hand loslaten | Eén hand loslaten | Vierhoek verdwijnt, terug naar IDLE |
| Horizontale veeg voor filterwissel | Met een willekeurige niet-knijpende hand over het scherm vegen | SwipeIndicator-zijgradiëntband + Toast Filter N/9 NAME |
| Filterwissel via toetsenbord | 1–9 directe sprong / [ ] of , . volgende/vorige | Toast Filter N/9 NAME |
| 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/filter_game
python3 -m tools.verify_allPrint elke stap:
- Module-imports (
gesture/filter_game/filters/overlay/utils) utilsgeometrie- en tekst-helpers- Alle 9 filters geven correcte shape en dtype terug
FilterGame-toestandsmachine +SwipeTrackerhorizontale-veegdetectie- Echte MediaPipe Hand Landmarker geladen op aarch64 (XNNPACK-delegate, ~110 ms opwarmtijd)
HandOverlay.add_event+ rendering (both_connected/filter_switch/swipe)- Gesynthetiseerde beidshands-pipeline draait 120 frames, en FilterGame heeft BOTH_PINCH minstens één keer bereikt
tools/run_synthetic.py — offline renderen naar PNG
python3 -m tools.run_synthetic --frames 200 --out /tmp/filter_demo
ls /tmp/filter_demo | wc -l # → 200Drijft de volledige FilterGame + HandOverlay-pipeline aan en print:
events total=N by_type={'both_connected': 1, ...}
BOTH_PINCH frames: 1 DRAG frames: 146Schrijft elk frame naar out/filter_XXXX.png. In een camera-loze omgeving de PNG's met ffmpeg tot een mp4 samenvoegen:
ffmpeg -framerate 30 -i /tmp/filter_demo/filter_%04d.png -c:v libx264 -pix_fmt yuv420p filter.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.