Skip to content
F

FingerPulse-CV

Touchless hand gesture LED controller with OpenCV

0

Created on 24th July 2026

•

F

FingerPulse-CV

Touchless hand gesture LED controller with OpenCV

The problem FingerPulse-CV solves

Traditional human-computer interaction (HCI) and hardware automation rely on physical buttons, switches, or touch interfaces, which can be inefficient or inaccessible in hands-free, sterile, or industrial environments.

FingerPulse-CV solves this by providing a low-cost, real-time vision-based control interface:

  • Touchless Hardware Control: Enables direct control of specific hardware pins (LEDs, relays, actuators) using simple hand gestures via a standard webcam.
  • Granular Pin Mapping: Unlike generic finger-counting algorithms, FingerPulse-CV tracks individual fingers (Thumb, Index, Middle, Ring, Pinky) to trigger dedicated output channels independently.
  • Accessible & Affordable: Works on basic microcontrollers (Arduino Uno/Nano) without requiring expensive sensor gloves or specialized hardware depth cameras.

Challenges I ran into

  1. Serial Port Locking & Synchronization:

    • Issue: Connecting Python and Arduino over USB Serial frequently threw "Permission Denied" errors when the Arduino IDE Serial Monitor or leftover processes locked COM7.
    • Solution: Implemented explicit exception handling in Python using pyserial, ensuring port safety and graceful socket teardowns on application exit.
  2. Thumb Tracking Accuracy:

    • Issue: Standard Y-axis landmark comparisons failed for thumb detection because the thumb moves laterally across the palm rather than folding down vertically like other fingers.
    • Solution: Switched to calculating Euclidean distance between thumb tip/IP landmarks and key palm anchors using math.hypot() for accurate lateral gesture recognition.
  3. Data Overhead & Latency:

    • Issue: Continuously streaming serial data every frame caused micro-lag on the Arduino microcontroller.
    • Solution: Designed a state-checking system in Python that transmits encoded 5-bit binary payloads (e.g., 10000) only when finger states change.

Discussion

Builders also viewed

See more projects on Devfolio