di Tommaso Bellinato | 2032597
Sviluppo del "Progetto C" per il corso “Elementi di programmazione di sistemi embedded” (6 CFU, codice INP8085258) edizione 2023-24.
Si chiede di implementare un’app per fornire il colore medio rilevato dalla fotocamera.
- Una prima interfaccia dell’app deve mostrare
- l’anteprima della fotocamera e
- il valore medio calcolato per ciascuna delle tre componenti colore
- con aggiornamento in tempo reale
- Una seconda interfaccia deve mostrare per ciascuna delle tre componenti colore
- i valori medi degli ultimi cinque minuti
- in maniera grafica
- con aggiornamento in tempo reale
- Non è richiesto che il calcolo e la registrazione dei dati continuino anche quando l’app è in background, ma nel caso in cui l’app passi in background
- l’app stessa non deve bloccarsi e deve rimanere in uno stato consistente.
Le immagini possono essere acquisite mediante la classe Camera
anche se è deprecata.
- Quale che sia il metodo di acquisizione utilizzato, si consiglia di
- impostare la dimensione e il frame rate dell’anteprima ai valori minimi supportati dalla fotocamera del proprio dispositivo.
Per implementare la visualizzazione dei dati è consentito utilizzare librerie esterne.
- Anteprima della Fotocamera:
- Visualizzazione in tempo reale dell'anteprima della fotocamera.
- Calcolo del Valore Medio per ciascuna Componente Colore:
- Calcolo in tempo reale del valore medio dei componenti RGB per ogni frame acquisito.
- OpenCV: libreria utilizzata per l'elaborazione delle immagini che può essere utilizzata per ottimizzare i valori medi dei colori.
- Visualizzazione Grafica dei Valori Medi degli Ultimi Cinque Minuti:
- Grafico in tempo reale che mostra l'andamento delle componenti colore degli ultimi cinque minuti di acquisizione
- MPAndroidChart: Una libreria completa per creare grafici in tempo reale su Android. Facile da utilizzare e altamente personalizzabile.
- Supporto lingue
- l’applicazione supporta in modo completo le lingue inglese (default) e italiano
- Aggiornamento in Tempo Reale delle Interfacce:
- UI Funzionante sia in Modalità Portrait che in Modalità Landscape:
- Adattabilità dell'interfaccia utente per funzionare correttamente in entrambe le orientazioni del dispositivo.
ConstraintLayout
: Un layout manager versatile che facilita la creazione di UI responsive e adattabili a diverse dimensioni di schermo e orientazioni.
- Consistenza dello Stato dell'App in Background:
- Gestione del ciclo di vita dell'app, in modo che non si blocchi e rimanga in uno stato consistente quando va in background.
- Impostazione della Dimensione e del Frame Rate dell'Anteprima ai Valori Minimi Supportati:
- Configurazione della fotocamera per utilizzare la dimensione di anteprima e il frame rate più bassi supportati dal dispositivo per ridurre il carico di elaborazione.
- Ottimizzazione delle Prestazioni:
- Implementate tecniche per ottimizzare le prestazioni dell'app, specialmente per quanto riguarda il calcolo dei valori medi e l'aggiornamento del grafico
- Utilizzo di View Binding:
- L'app utilizza il View Binding per interagire con le viste XML in modo sicuro ed efficiente.
- Il View Binding riduce il rischio di crash causati da errori di tipo
NullPointerException
, migliora la leggibilità del codice e facilita la manutenzione, poiché genera automaticamente le classi di binding per ogni layout XML, eliminando la necessità di chiamarefindViewById()
.
L'uso di View Binding nel progetto garantisce che le interazioni con le viste siano sicure e prive di errori di runtime, migliorando al contempo la leggibilità e la manutenibilità del codice. Questa pratica, insieme all'uso di altre tecnologie e librerie come LiveData
, ViewModel
, Room
e ConstraintLayout
, contribuisce a creare un'app robusta e performante.