Skip to content

UniSalento-IDALab-IoTCourse-2023-2024/wot-Sistema-intelligente-per-riconoscere-urti-Machine-Learning-Schirinzi-Paglialonga

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C.A.R.E.


Panoramica


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 DEL SISTEMA


Architettura

Le componenti principali dell’architettura 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 si acquisire dati in tempo reale dai sensori (accelerometro e giroscopio) situati sullo smartphone su cui l’app viene eseguita. Una volta acquisiti vengono inviati, grazie al protocollo MQTT, all’algoritmo di ML che classifica i dati in eventi di incidenti ed 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.

REPOSITORY DEI COMPONENTI:


MACHINE LEARNING C.A.R.E.


1. Preparazione e pulizia dei dati

I dati sugli incidenti rappresentati mediante un file json sono stati trasformati in un DataFrame e sottoposti a pulizia: tutti i valori nulli sono stati sostituiti con la media della rispettiva colonna per evitare che eventuali mancanze influenzino negativamente il modello. Successivamente, le colonne sono state rinominate per rispecchiare le misurazioni dei sensori di accelerazione e giroscopio, facilitando la comprensione e la gestione delle variabili. Questo set di dati è stato poi esportato in formato CSV per l’addestramento del modello.

L'obiettivo è addestrare un modello capace di distinguere un incidente da un evento classificato come "altro" (accelerazione costante, accelerazione improvvisa, frenata costante, frenata improvvisa, svolta a destra e svolta a sinistra). Per includere anche questi eventi, sono stati cercati online dataset aggiuntivi rappresentativi della categoria "altro". In particolare, tramite la piattaforma Kaggle è stato trovato un dataset adeguato ai nostri scopi.

Successivamente, il dataset è stato etichettato aggiungendo una colonna che distingue gli eventi di "incidente" rispetto a quelli di "altro", creando così un set di dati unificato per il training. Poiché i dati non erano bilanciati (con più esempi di una classe rispetto all’altra), è stata applicata la tecnica SMOTE, che genera esempi sintetici per la classe minoritaria, equilibrando così le classi ed evitando che il modello sviluppi un bias verso la classe maggioritaria.

Il dataset bilanciato è stato suddiviso in due parti: un set di addestramento (80%) e un set di test (20%), in modo da poter addestrare il modello e poi valutarne le prestazioni su dati nuovi, andandone cosi a testare la capacità di generalizzare.

Addestramento modello

  1. Installazione dipendenze
  pip install pandas
  pip install scikit-learn
  pip install imbalanced-learn
  pip install joblib
  pip install matplotlib
  pip install seaborn
  1. Addestramento del modello Random Forest
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
  1. Prestazioni ottenute
Matrice_confusione Report

About

wot-project-part3-fschirinzi34 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages