Files
PeopleCounter/README.md
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

124 lines
4.5 KiB
Markdown

# 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:**
```bash
pip install -r requirements.txt
```
3. **Download the face detection model files:**
```bash
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:
- `deploy.prototxt` from: https://github.com/opencv/opencv/blob/master/samples/dnn/face_detector/deploy.prototxt
- `res10_300x300_ssd_iter_140000.caffemodel` from: https://github.com/opencv/opencv_3rdparty/dnn_samples_face_detector_20170830/res10_300x300_ssd_iter_140000.caffemodel
Place both files in the `models/` directory.
## Usage
1. **Make sure your USB camera is connected**
2. **Run the Flask application:**
```bash
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.