A lightweight web application that uses computer vision to track and analyze customer experiences. By monitoring an exit camera, the system detects customer emotions (Positive/Negative) in real-time, respects privacy by optionally blurring faces, and visualizes the feedback analytics in a beautifully designed web dashboard.
- Live Analytics Dashboard: Real-time insights into customer sentiment, emotion distribution, and recent feedback logs.
- AI Emotion Tracking: Utilizes OpenCV and YOLO for real-time face detection and tracking.
- Privacy-First Design: Includes an option to blur faces in the live video feed to comply with privacy standards.
- Dual Storage Options: Toggle between local JSON-based storage (works offline) and Firebase for cloud-synced data.
- Camera Management: Scan and select different camera sources directly from the settings panel.
- Backend: Python, Flask, Waitress
- Computer Vision: OpenCV, YOLO (Ultralytics / OpenVINO)
- Frontend: HTML5, Vanilla CSS (Glassmorphism design), JavaScript (Chart.js)
- Storage: Local JSON / Firebase Admin SDK
Make sure you have Python installed. Then, install the required packages:
pip install -r requirements.txtStart the Waitress production server:
python app.pyThe application will start on port 5000. You can access the dashboard by opening your browser and navigating to http://localhost:5000.
feedback/
├── app.py # Main Flask application entry point
├── requirements.txt # Python dependencies
├── config.json # Configuration file (Storage mode, camera source, privacy)
├── yolov8n.pt # YOLOv8 nano model weights
├── core/ # Core application logic
│ ├── feedback_engine.py # Maps emotion data to positive/negative feedback
│ ├── storage.py # Abstraction layer for Local JSON & Firebase storage
│ ├── tracker.py # AI face/object tracking logic
│ └── video_stream.py # Camera management and OpenCV stream processing
├── data/ # Local storage directory (if using local mode)
├── templates/ # HTML templates for the dashboard and settings
└── static/ # Static assets (CSS, JS, Images)
Settings can be dynamically updated via the web interface (http://localhost:5000/settings), or by modifying the config.json file directly:
storage_mode:"local"or"firebase"camera: Dictionary containing the camera"source"index (e.g.,0for default webcam).privacy: Dictionary containing the"blur_faces"boolean toggle.