Tired of walking down to the laundry room only to find all machines occupied, we built a system that lets Tembusu College residents check laundry machine availability right from Telegram.

We built full-stack pipeline that monitors laundry machine status using computer vision and a Telegram bot:

  • A PaddleOCR pipeline that crops each machine's display, reads the timer, and writes status to a SQLite database
  • A Telegram bot that lets residents check machine availability, get notified when a machine is free, and view a weekly usage heatmap
  • A web frontend for one-time calibration of machine bounding boxes

How We Built It

Backend: Flask server exposes a REST API to receive images, trigger OCR, and update the database OCR: PaddleOCR reads timer digits on each washer/dryer display. Bounding boxes are configured once via a web UI and saved to points.json Database: SQLite stores current machine statuses and wash event history Bot: python-telegram-bot handles commands, inline keyboards, notification lists, and a matplotlib heatmap of weekly usage patterns

Challenges OCR accuracy on small LCD displays required preprocessing (inversion, thresholding, HSV filtering) Running Flask and the Telegram bot concurrently required threading Perspective-correcting bounding boxes using cv2.getPerspectiveTransform to handle camera angles

What's Next In our ideal solution, an ESP32-CAM or similar embedded camera would be mounted in the laundry room, periodically capturing images and POSTing them to the Flask server automatically — completing the end-to-end pipeline without any manual intervention. Due to time constraints we were unable to get the hardware integration working, but the server is fully designed to receive and process images from any HTTP-capable camera.

Built With

Share this project:

Updates