Il progetto si basa su un'architettura modulare che gestisce la raccolta, l'elaborazione e la fruizione dei dati in fasi distinte.
Le 3 Macro-fasi dello sviluppo
Fase 1: Raccolta Dati e Profilazione Iniziale (Asincrona)
Fase 2: Monitoraggio Sincrono in Tempo Reale
Fase 3: Fruizione del Servizio e Personalizzazione (App Minervas)
Architettura completa

- Codice plantUML Diagramma Architetturale
<aside>
<img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" />
DESCRIZIONE DIAGRAMMA
Descrizione Dettagliata dell'Architettura e del Flusso di Lavoro
Questo diagramma illustra il flusso completo dei dati e le interazioni tra i componenti del sistema "Shumi". Il processo è stato riprogettato e suddiviso in due macro-fasi logiche e sequenziali: una prima fase di profilazione asincrona per costruire un profilo statico del conducente, e una seconda fase di monitoraggio sincrono durante la guida reale.
<aside>
Macro-Fase 1: Profilazione Asincrona (Offline)
Questa fase si svolge prima della guida reale e ha l'obiettivo di creare un profilo fondamentale e statico del conducente.
- Raccolta Dati Iniziale:
- Test Attitudinale: Come primo passo, il Conducente compila un test attitudinale. Il risultato viene inviato direttamente al server per una prima valutazione.
- Guida al Simulatore (ETS2): Successivamente, il conducente affronta una sessione di guida su Euro Truck Simulator 2. Durante questa fase, un Modulo di Raccolta Dati (Script Python) si aggancia all'SDK del simulatore per estrarre in tempo reale esclusivamente i dati telemetrici (velocità, giri motore, uso dei pedali, ecc.). La webcam non viene utilizzata in questa fase.
- Canale di Comunicazione (MQTT): Lo script di raccolta impacchetta i dati telemetrici (es. in formato JSON) e li pubblica su un topic specifico di un MQTT Broker. Questo intermediario disaccoppia il client dal server, garantendo una comunicazione asincrona e affidabile.
- Elaborazione e Creazione del Profilo Statico (Server-Side):
- Orchestratore (FastAPI): Un componente sul server è sottoscritto al topic MQTT. Appena riceve i dati telemetrici, li instrada al modello di Machine Learning.
- Modello ML (Stile di Guida): Questo artefatto pre-addestrato analizza la sequenza di dati telemetrici e restituisce una classificazione dello stile di guida (es. "prudente", "aggressivo").
- Modulo di Profilazione: È il componente che unifica le informazioni. Riceve due input: il risultato del test attitudinale e la classificazione dello stile di guida dal modello ML. Combinando queste due fonti, crea un profilo utente statico e completo.
- Database Profili Utente: Il profilo statico finale viene salvato in un database persistente (es. PostgreSQL, MongoDB), pronto per essere consultato.
</aside>
<aside>
Macro-Fase 2: Monitoraggio Sincrono (Real-Time)
Questa fase si attiva durante la guida effettiva su un veicolo reale, dopo che il conducente è stato profilato.
- Contesto e Raccolta Dati Live:
- Una Telecamera installata nella cabina del veicolo riprende il volto del conducente.
- Il flusso video viene inviato in tempo reale a un Modello di Computer Vision (CV).
- Analisi dello Stato d'Animo: Il modello CV è un servizio sempre attivo che analizza i frame video per determinare lo stato d'animo del conducente (es. "calmo", "stanco", "distratto"). Questo risultato viene esposto come un flusso di dati live, disponibile per essere consumato da applicazioni esterne.
</aside>
<aside>
Fruizione del Servizio e Personalizzazione (App Minervas)
L'Applicazione Minervas è il punto in cui le informazioni delle due macro-fasi convergono per fornire un'assistenza intelligente e contestuale.
- Accesso ai Dati: L'applicazione utilizza due canali distinti per ottenere un quadro completo:
- Profilo Statico (via API REST): Effettua una richiesta HTTP (es.
GET /profili/nome_utente
) a un'API REST esposta dal server. L'API interroga il Database, recupera il profilo statico (test + stile di guida), lo formatta in JSON e lo restituisce all'app. Questo risponde alla domanda: "chi è il conducente?".
- Stato d'Animo Live: L'applicazione si collega direttamente al servizio del Modello CV per ricevere in tempo reale lo stato d'animo attuale. Questo risponde alla domanda: "come sta il conducente in questo momento?".
- Personalizzazione Dinamica: Combinando il profilo statico con lo stato d'animo live, l'applicazione Minervas può adattare dinamicamente le sue raccomandazioni, il tono del feedback e gli avvisi, offrendo un supporto realmente personalizzato ed efficace.
</aside>
</aside>