eroncero 432f0378bf feat: initial implementation of People Counter web app
- Add Flask application with MJPEG video streaming
- Implement OpenCV DNN face detection module
- Add zone-based entry/exit tracking with cooldown mechanism
- Create web interface with real-time WebSocket updates
- Add model download script and comprehensive README
- Include OpenCV DNN model files for face detection
2026-01-20 00:44:06 +01:00

People Counter Web App

A real-time web application that uses USB camera face detection to count people entering and leaving a room, with zone-based entry/exit tracking.

Features

  • Real-time face detection using OpenCV DNN face detector
  • Zone-based entry/exit tracking (left zone = entry, right zone = exit)
  • Live video streaming via MJPEG
  • Real-time count updates via WebSocket
  • Visual indicators for overpopulation warnings
  • Clean, modern web interface

Prerequisites

  • Python 3.7 or higher
  • USB camera connected to your computer
  • Linux/Windows/macOS

Installation

  1. Clone or download this repository

  2. Install Python dependencies:

    pip install -r requirements.txt
    
  3. Download the face detection model files:

    python download_models.py
    

    This will download the required OpenCV DNN model files to the models/ directory.

    Note: If the automatic download fails, you can manually download:

    Place both files in the models/ directory.

Usage

  1. Make sure your USB camera is connected

  2. Run the Flask application:

    python app.py
    
  3. Open your web browser and navigate to:

    http://localhost:5000
    
  4. The application will:

    • Display live video feed from your camera
    • Detect faces in real-time
    • Count people entering (left zone) and exiting (right zone)
    • Display current occupancy and statistics
    • Show visual warnings when occupancy is high

Configuration

You can modify the following settings in app.py and camera.py:

  • Camera index: Change camera_index=0 to use a different camera
  • Frame processing rate: Adjust process_every_n_frames (default: 3) to balance performance and accuracy
  • Face detection confidence: Modify face_confidence threshold (default: 0.5)
  • Zone boundaries: Adjust entry_zone_percent and exit_zone_percent in zone_tracker.py
  • Cooldown period: Change cooldown_seconds to prevent double-counting (default: 2.0 seconds)
  • Maximum occupancy: Update MAX_OCCUPANCY in static/js/main.js for overpopulation warnings

How It Works

  1. Camera Capture: The camera module captures frames from your USB camera
  2. Face Detection: OpenCV DNN detects faces in the video frames
  3. Zone Tracking: The zone tracker determines which zone each face is in:
    • Left 40% = Entry zone (green)
    • Right 40% = Exit zone (red)
    • Center 10% = Buffer zone (ignored to prevent false counts)
  4. Counting Logic: People are counted when they appear in entry/exit zones with a cooldown period to prevent double-counting
  5. Real-time Updates: Counts are sent to the web interface via WebSocket for live updates

Project Structure

PeopleCounter/
├── app.py                 # Flask main application
├── camera.py              # Camera capture wrapper
├── face_detector.py       # Face detection module
├── zone_tracker.py        # Zone-based tracking logic
├── download_models.py     # Script to download model files
├── requirements.txt       # Python dependencies
├── models/                # OpenCV DNN model files
│   ├── deploy.prototxt
│   └── res10_300x300_ssd_iter_140000.caffemodel
├── templates/
│   └── index.html         # Main web interface
└── static/
    ├── css/
    │   └── style.css      # Styling
    └── js/
        └── main.js        # Client-side JavaScript

Troubleshooting

  • Camera not found: Make sure your camera is connected and try changing the camera_index in camera.py
  • Model files missing: Run python download_models.py to download required files
  • Slow performance: Increase process_every_n_frames value or reduce video resolution
  • Double counting: Increase the cooldown_seconds value in zone_tracker.py

Security & Privacy

  • All processing runs locally (no cloud storage)
  • No face recognition - only detection (no personal identification)
  • Video frames processed in memory, not stored
  • Optional: You can modify the code to blur faces for display if privacy is a concern

License

This project is open source and available for use and modification.

Description
No description provided
Readme 9.7 MiB
Languages
Python 71.2%
JavaScript 12.7%
CSS 10.6%
HTML 5.5%