Adrián Carrillo, home
Work

Undergraduate thesisPUCE Ibarra

TAXIBOCARCHI: counting passengers with TinyML

A microcontroller counts how many people are waiting for a taxi at a rural stop and alerts the drivers. It only sends a number, never an image.

88.3% model F1 score

Role
Thesis author
Status
validated prototype, 18 of 18 tests passed
Stack
C++/Arduino, Edge Impulse, ESP32-S3, Python/Flask, NestJS, React, Firestore, Telegram Bot API
The assembled prototype. A gray 3D-printed box with the camera lens on the front and the Wi-Fi antenna on one side.

The problem

On the rural route between Bolívar and El Ángel, in Ecuador’s Carchi province, each shared taxi only leaves once it is full. Nobody knows how many people are waiting at the stop.

What I did

I built a prototype that counts the people at the stop and alerts the drivers. It was my undergraduate thesis.

  • Computer vision inside the microcontroller. An int8 FOMO model (MobileNetV2), trained with Edge Impulse, runs on a XIAO ESP32-S3.
  • Privacy by design. The device only sends the number of people. The image never leaves the stop.
  • Dashboard and alerts. A Flask and NestJS backend on Firestore, a real-time React dashboard and a Telegram bot for the drivers.
  1. 01 Perception

    At the stop

    • OV2640 camera 96 × 96 px, grayscale
    • XIAO ESP32-S3 Sense FOMO int8 model · 314 ms · 69 KB of RAM
    • People count The image is discarded. It is never stored or sent.
  2. The only thing sent { "personas": 4 }
    Wi-Fi · HTTPS · JSON
  3. 02 Network and data

    In the cloud

    • Flask backend Receives the count and decides whether to alert
    • Firebase Firestore History, users and settings
    • NestJS API Statistics and driver accounts
  4. Live data and alerts
    Firestore · Telegram
  5. 03 Application

    With people

    • React web dashboard Live status of the stop
    • Telegram bot Early alert at 3 people, urgent at 4 or more
    • The driver Replies “On my way!” from the chat
The three layers of the system. Only a number leaves the stop.
  • The prototype opened up: the battery and wiring inside the 3D-printed box.

    Inside: battery, board and antenna.

  • The XIAO ESP32-S3 board with its camera module, next to the Wi-Fi antenna.

    XIAO ESP32-S3 Sense with its camera.

  • Dashboard showing 2 people at the stop, in green.

    Normal: 2 people.

  • Dashboard showing 4 people at the stop, in red, with the alert sent to Telegram.

    Urgent: 4 people.

The dashboard changes state with the number of people waiting. The interface is in Spanish.
Telegram bot message, in Spanish: “Taxi urgently needed! Passengers waiting: 4”, with an “On my way!” button.
The alert a driver receives.

Outcome

The model beat the 85% F1 target and the prototype passed all 18 tests. The code is public on GitHub.

  • 88.3% model F1 score target: above 85%
  • 314 ms per inference inside the ESP32-S3
  • 69 KB of RAM used by the model
  • 4.2 s from capture to dashboard end to end
  • 18/18 tests passed

Command palette

Home
Work
About
Contact
Résumé
Uses: my tools
SRI electronic invoicing 0 duplicate invoices
TAXIBOCARCHI 88.3% model F1 score
Aurum VIP Club 3 steps to book with a deposit
Clothing store system offline works without internet
Cambiar a español ES
Copy my email danilocarrillo1515@gmail.com
Message me on WhatsApp WhatsApp
Open LinkedIn linkedin.com
Open GitHub github.com/AdrianC1530