PROGRAMMAZIONE AVANZATA DI SISTEMI MOBILI

Docenti: 
Crediti: 
6
Sede: 
PARMA
Anno accademico di offerta: 
2017/2018
Settore scientifico disciplinare: 
SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI (ING-INF/05)
Semestre dell'insegnamento: 
Primo Semestre
Lingua di insegnamento: 

Italiano

Obiettivi formativi

Conoscenza e Comprensione
Lo scopo del corso è quello di comprendere come poter realizzare applicazioni (App) avanzate per dispositivi mobili. Oltre alle conoscenze specifiche dei vari linguaggi di programmazione (C++, OpenCV e Java) si acquisiranno conoscenze relative al sistema operativo Android.

Capacità di applicare conoscenza e comprensione
Lo studente acquisirà la capacità di realizzare applicazioni complesse per dispositivi mobili.

Prerequisiti

E' fortemente consigliabile (anche se non obbligatorio) aver seguito il corso di Programmazione di Sistemi Mobili alla triennale.

Contenuti dell'insegnamento

Riallineamento su piattaforme mobili, programmazione di dispositivi mobili e problematiche connesse alla programmazione mobile. Dettaglio della piattaforma Android e delle Android SDK.
Realizzazione di interfaccie grafiche Android mediante widgets. Accessibilità ai sensori mediante Android SDK. Buone pratiche nello sviluppo di App.
Android NDK (Native Development Kit), JNI (Java Native Interface) e IDE di sviluppo Android Studio.
Esempi di applicazioni avanzate possibili.

Introduzione alle applicazioni di mobile vision (visione artificiale applicata a dispositivi mobili).
La libreria OpenCV e il suo interfacciamento con Android: modulo core e il contenitore Mat; modulo imgproc (filtri 2D sulle immagini, morfologia binaria, edge detection, template matching, ecc.); creazione interfacce; feature extraction (Shi-Tomasi, SIFT, SURF, ORB, ecc.); object detection (cascade classifiers, ecc.).
Esempi di progetti OpenCV su dispositivi mobili.

Cenni ad altre applicazioni mobili. Uso dei sensori (accelerometri, giroscopio, .) per applicazioni avanzate.

Programma esteso

Il corso si articola in circa 42 ore di didattica frontale sui seguenti argomenti (durate indicative):
- introduzione al corso; introduzione alla mobile vision e sue applicazioni; introduzione ad Android; Strumenti di sviluppo; emulatore; emulatore GenyMotion (4 ore)
- primo esempio con OpenCV; rappresentazione delle immagini digitali; spazi colore; la classe Mat di OpenCV; Metodi della classe Mat di OpenCV; (3 ore)
- caricamento di un'immagine da file; istogramma di un'immagine; calcolo e visualizzazione dell'istogramma; equalizzazione dell'istogramma (5 ore)
- filtri spaziali: smoothing, order-statistics, sharpening; filtri del primo ordine; implementazione filtri spaziali; edge detection; implementazione Sobel e Canny; Implementazione Canny su immagini live; (4 ore)
- trasformata di Hough e sua implementazione per le rette; widget SeekBar; gestione click e long click; GBHT; trasformata di Hough per i cerchi (2 ore)
- trasformazioni geometriche; esempio GeometryCorrection; evento touch (2 ore)
- feature detection and matching; operatore di Harris; FAST detector; ORB detector; feature description; BRIEF, ORF, BRISK e FREAK descriptors; implementazione dell'image matching; invarianza degli operatori (6 ore)
- presentazione competition e tesine (2 ore)
- SIFT; SURF; Primo esempio NDK; Verifica numero primo in NDK; Interfacciamento NDK-OpenCV - Harris, FAST e ORB in NDK; image matching e stitching in NDK; ricompilazione codice C++ per NDK Android; SIFT, SURF, FREAK e BRIEF (6 ore)
- accesso ai sensori in Android; accelerometro, bussola e sensori ambientali; Uso di bluetooth; uso GPS; (3 ore)
- classificatori; Cascade classifiers (3 ore)
- segmentazione di immagini (2 ore)

Bibliografia

Slide del corso e materiale online.

Metodi didattici

Il corso consisterà di circa 40 ore di didattica frontale (con esempi pratici di programmazione).

Modalità verifica apprendimento

L'esame consisterà nella realizzazione di un'App avanzata da svolgere singolarmente. L'argomento dell'App verrà stabilito insieme al docente.