WattBot is a full-stack web application that lets you upload images of electricity meters and automatically extract
readings using a custom-trained YOLO model.
The project includes a Python FastAPI backend and a React frontend with support for dark mode, currency selection, and
price tracking.
- 📸 Upload electricity meter images
- 🔍 Detect digital readings using a trained YOLO model
- 🌙 Dark mode support
- 💰 Track electricity prices and consumption history
- 🛠 Built with FastAPI (Python) and React + Material UI
- 🐳 Easy deployment via Docker
- Frontend: React, Material UI, TypeScript
- Backend: FastAPI, Python 3.13, Uvicorn, Pydantic
- Machine Learning: YOLOv11s-obb (custom-trained on real electricity meter data)
- Database: MongoDB
- Containerization: Docker, Docker Compose
- CI/CD: GitHub Actions
-
Create a new folder and save the contents of
docker-compose.ymlfrom this repo into a file nameddocker-compose.yml. -
Open a terminal in that folder and run:
docker compose pull
docker compose up -d- Navigate to the app:
- Frontend UI: http://localhost:80
- Backend API docs: http://localhost:8000/docs
If you're deploying on a remote server, replace localhost with your server's IP (e.g., http://123.123.123.123:5173).
The YOLO model was trained on a limited dataset of real electricity meters. If your meter's layout or font style is significantly different, the reading might be misinterpreted.
If you encounter inaccuracies and want to improve precision for your meter type, feel free to open an issue contributions are welcome!
Make sure you have the following installed on your machine:
Runs on http://localhost:8000
cd backend
pip install -r requirements.txt
uvicorn main:app --reloadSwagger UI available at: http://localhost:8000/docs
Runs on http://localhost:5173
cd frontend
npm install
npm run devFastAPI automatically generates interactive API docs:
- Swagger UI – Try out endpoints directly from the browser
- ReDoc – Clean reference-style documentation
This project is licensed under the MIT License – see the LICENSE file for details.
