Skip to content

saadkamal/waveback

Repository files navigation

WaveBack

WaveBack is an open-source, touchless feedback kiosk for restaurants and retail counters. It uses an ESP32-WROVER camera over USB serial, a local Python camera bridge, and a FastAPI backend with MediaPipe gesture detection to record customer feedback from smiles, thumbs up, and thumbs down.

The customer-facing kiosk runs locally at http://127.0.0.1:8002/kiosk and displays a large live camera preview with the prompt:

Express your Experience
Smile, 👍 or 👎 to share your feedback

Features

  • ESP32-WROVER camera capture over USB serial.
  • Local camera bridge exposing JPEG frames over HTTP.
  • FastAPI backend for detection, stats, dashboard, and kiosk UI.
  • MediaPipe hand detection for thumbs up and thumbs down.
  • MediaPipe face mesh heuristics for smile and negative expression detection.
  • Polished kiosk screen with positive thank-you flow and negative coupon flow.
  • Real SVG QR code generation for the demo coupon.
  • Optional I2C 1602 LCD firmware support.

Project Structure

backend/                     FastAPI backend and kiosk/dashboard frontend
camera_serial_localhost/      ESP32 serial camera firmware and local bridge
camera_web_ap/                Alternative ESP32 camera web AP firmware
firmware/                     Reference ESP32 firmware binary
*.md                          Product and implementation docs

Local Setup

Create and activate a Python virtual environment, then install the backend dependencies:

python3 -m venv .venv
.venv/bin/python -m pip install -r backend/requirements.txt

Start the ESP32 USB camera bridge:

cd camera_serial_localhost
../.venv/bin/python tools/local_camera_server.py

In another terminal, start the backend:

cd backend
../.venv/bin/python -m uvicorn app:app --host 127.0.0.1 --port 8002 --reload

Open:

  • Kiosk: http://127.0.0.1:8002/kiosk
  • Dashboard: http://127.0.0.1:8002/dashboard
  • Health check: http://127.0.0.1:8002/health

ESP32 Firmware

The active USB serial camera firmware lives in camera_serial_localhost/src/main.cpp and is built with PlatformIO.

cd camera_serial_localhost
pio run
pio run --target upload

The firmware is Arduino C++ for ESP32, not MicroPython.

Open Source License

WaveBack is released under the MIT License. See LICENSE.

About

Open-source touchless gesture feedback kiosk using ESP32, FastAPI, and MediaPipe

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors