progetto

Il progetto C.A.R.E. si pone l'obiettivo di creare un'app Android per raccogliere dati dai sensori di accelerometro e giroscopio montati su uno smartphone; questi vengono inviati in tempo reale ad un algoritmo di Machine Learning che classifica i dati raccolti in una classe del tipo “incidente” o “altro”. Con il termine "altro" si raggruppano tutti gli eventi di accelerazione constante, accelerazione improvvisa, frenata constante, frenata improvvisa, svolta a destra e svolta a sinistra. Se l’evento rilevato è “incidente”, il fenomeno in questione viene memorizzato all’interno di un database MongoDB per essere analizzato meglio in seguito dall’admin dell’app (responsabile della compagnia assicurativa) mediante opportune dashboard. L'interfaccia è facile ed intuitiva e permette agli utenti di registrarsi, fare il login, di visualizzare in tempo reale i dati di accelerometro e giroscopio e l’evento che è stato rilevato.

architettura

Nell'immagine è possibile vedere l'architettura fisica del sistema, presentando tutte le tecnologie utilizzate e la loro interazione.

Le componenti principali sono:

  • Front end: Realizzato con Flutter, prevede inizialmente un’interfaccia di login e registrazione e, una volta loggato, l’utente può navigare all’interno della sua area riservata visualizzando i dati di accelerometro e giroscopio raccolti in tempo reale, lo storico dei suoi incidenti e le sue informazioni personali, con l’opportunità di poterle modificare.


  • Android Studio: Grazie all’utilizzo di questo IDE si è creata un’app in grado di acquisire dati in tempo reale dai sensori (accelerometro e giroscopio) situati sullo smartphone su cui l’app viene eseguita. Una volta acquisiti, questi dati vengono inviati, grazie al protocollo MQTT, all’algoritmo di ML che classifica i dati in eventi di incidenti e altro.


  • Python: Si è addestrato un modello di Random Forest che è in grado di classificare, in base ai dati ricevuti in input, un evento, distinguendolo in una di queste due classi: incidente e altro. Inoltre, grazie al framework Flask, si sono sviluppate delle API che hanno permesso alle varie componenti dell'applicazione di comunicare con il database MongoDB.


funzionalità

Acquisizione dati:

L'acquisizione dei dati dai sensori del telefono è una fase cruciale per il progetto, poiché fornisce le informazioni necessarie per monitorare i movimenti del dispositivo e dunque dell'automobile. Per realizzare quest'app, si è utilizzato Android Studio come ambiente di sviluppo integrato (IDE), sfruttando le API di Android per accedere ai sensori integrati nel dispositivo, accelerometro e giroscopio, riuscendo così ad ottenere un'acquisizione dei dati in tempo reale. Nella schermata iniziale dell'utente vengono visualizzati i dati acquisiti dai sensori e l'evento classificato dall'algoritmo di Machine Learning in tempo reale.

Gestione falsi positivi:

Il modello di Machine Learning utilizzato mostra valori di recall e precision molto vicini al 100%. Tuttavia, la matrice di confusione evidenzia che, seppur rari, alcuni eventi non vengono classificati correttamente. Nel caso in cui venga rilevato un falso positivo (cioè un evento “altro” che viene classificato erroneamente come “incidente”), questo viene memorizzato nel database compromettendo una futura analisi da parte dell’admin della compagnia assicurativa. Per evitare questo inconveniente è stato introdotto un comando vocale che si attiva nel momento in cui il modello di ML rileva un incidente, chiedendo all’utente di rispondere alla domanda “Hai fatto un incidente?”. In caso di risposta negativa (deve dire la parola “no”) si richiama l’API che elimina l’incidente memorizzato per errore nel database. In questo caso appare una schermata dalla durata di tre secondi (in questo modo l’utente non si distrae andando a togliere personalmente quella notifica) che indica che l’incidente è stato eliminato correttamente. Poiché gli incidenti, per un singolo utente, non si avverano con molta frequenza e i falsi positivi sono ancora più rari, questa strategia ha degli ottimi risultati. In caso contrario, il continuo invio di notifiche all'utente avrebbe reso l’applicazione poco usabile, distraendolo alla guida e generando un effetto negativo.

Modifica informazioni personali:

All'utente viene data la possibilità di modificare le prorpie informazioni personali e di eliminare il proprio account mediante l'interfaccia grafica visualizzabile in figura.

Visualizzazione dati storici:

Quando il modello di ML classifica un evento come "incidente" viene richiamata un API che salva l'evento all'interno del database MongoDB. In questo modo l'utente in qualsiasi momento può visualizzare il suo storico per vedere gli incidenti che ha fatto.

Analisi Dati:

L'admin, utilizzando le proprie credenziali, può accedere alla sua area personale per visualizzare informazioni generali sull'app, come il numero di utenti registrati, il totale degli incidenti rilevati e i dati relativi agli incidenti raccolti fino a quel momento. È possibile visualizzare un grafico che mostra l'andamento degli incidenti nel tempo, con l'opzione di distinguere tra tutti gli utenti o di visualizzare i dati relativi a un singolo utente. Questa analisi consente di identificare pattern significativi, come i giorni con maggiore probabilità di incidenti, l'andamento degli incidenti nel tempo (se in aumento o diminuzione), e i periodi in cui si verificano più collisioni.

demo

team

Full Stack Developer

cosimo.paglialonga@studenti.unisalento.it

Full Stack Developer

francesco.schirinzi1@studenti.unisalento.it