approfondimento 13 - open Cv - Dipartimento di Matematica e

Università degli Studi di Catania
Corso di Laurea Magistrale in Informatica
Multimedia 2013/14
Cantarella Danilo
OpenCV Android
Introduzione
• OpenCV (Open Source Computer Vision Library) è una
libreria disponibile per Windows, Linux, Mac OS,
Android e iOS
• Dispone di interfacce in C++, C, Python e Java
• L’obiettivo è quello di offrire un supporto per
applicazioni che hanno lo scopo di trasformare in
tempo reale immagini e video
OpenCV Android
2
Applicazioni
• Alcuni esempi:
– Interazione uomo-macchina
– Motion tracking
– Riconoscimento di forme e colori
– Realtà aumentata
– Identificazione di oggetti
– Matching di immagini
– Camera calibration
OpenCV Android
3
Installazione (1)
• Per sviluppare con la versione Android della libreria, è
possibile integrare il tutto con Eclipse
• Scaricare l’SDK Android dall’indirizzo
https://developer.android.com/sdk/ e installarlo
seguendo il tutorial disponibile all’indirizzo
http://developer.android.com/sdk/installing/
• Scaricare la versione Android delle librerie OpenCV
da http://opencv.org/
OpenCV Android
4
Installazione (2)
• Importare su Eclipse la libreria scaricata seguendo il
tutorial presente all’indirizzo
http://docs.opencv.org/doc/tutorials/introduction/a
ndroid_binary_package/O4A_SDK.html
• Provare i progetti di esempio disponibili insieme alla
libreria
OpenCV Android
5
Nozioni di base Android
• In Android ogni oggetto disegnato a schermo
rappresentata una view
• Una singola schermata dell’applicazione rappresenta
un’activity, che corrisponde quindi ad un’azione che
l’utente può compiere
• Le activity comunicano tra di loro attraverso dei
messaggi chiamati intent, che rappresenta dunque
l’azione compiuta
• AndroidManifest.xml cuore dell’applicazione
OpenCV Android
6
Nozioni di base OpenCV
• In OpenCV le immagini sono rappresentate attraverso
una struttura di tipo Mat
• Funzione Mat onCameraFrame(Mat aInputFrame) per
l’elaborazione in tempo reale dei frame prodotti dalla
camera del dispositivo
• API Java -> http://docs.opencv.org/java/
OpenCV Android
7
Creazione progetto
• Per creare un progetto Android su Eclipse bisogna
fare New -> Project, scegliere Android Application
Project e seguire la procedura guidata
• Per poter utilizzare anche la libreria OpenCV, dalle
proprietà del progetto, sulla scheda Android, bisogna
aggiungere la reference alla libreria OpenCV
precedentemente importata su Eclipse
OpenCV Android
8
Struttura OpenCV
• OpenCV ha una struttura a moduli:
– Core
– Imgproc
– Highgui
– Calib3d
– Features2d
– Objdetect
– Video
– Gpu
OpenCV Android
9
Modulo core
• Fornisce le strutture base per la manipolazione delle
immagini a livello del singolo pixel
• Permette operazioni come:
– L’acquisizione e la memorizzazione di immagini
– Regolazione contrasto e luminosità
– Operazioni bit a bit sulle matrici
– Disegnare oggetti (punti, forme geometriche) sulle
matrici
OpenCV Android
10
Modulo imgproc
• Fornisce le funzioni per il processing delle immagini.
Esempi:
– Smoothing di immagini
– Operazioni morfologiche
– Binarizzazione
– Creazione di filtri personalizzati
– Edge detector
– Trasformazioni affini
– Calcolo degli istogrammi
OpenCV Android
11
Modulo highgui
• Fornisce gli strumenti per effettuare operazioni di
I/O su immagini
• Permette l’acquisizione, la creazione e la modifica
(come ad esempio la compressione) di video
• Permette di interfacciarsi con l’utente
OpenCV Android
12
Progetto realizzato (1)
• Applicazione Android – Activity principale
OpenCV Android
13
Progetto realizzato (2)
• Applicazione Android – Activity della camera
OpenCV Android
14
Progetto realizzato (3)
• Struttura dell’applicazione:
– Activity principale costituita da 4 linear layout
orizzontali dove sono presenti i bottoni per
richiamare le varie funzioni disponibili
– Activity della camera che gestisce attraverso degli
switch tutte le funzionalità presenti
– Opzioni di personalizzazione disponibili per ogni
funzione
OpenCV Android
15
Progetto realizzato (4)
• Funzioni implementate:
1. Algoritmo di Canny
2. Operatore di Sobel
3. Thresholding
4. Operazioni morfologiche
5. Visualizzazione canali RGB
6. Detect del colore nello spazio HSV
7. Riconoscimento di forme geometriche
OpenCV Android
16
Algoritmo di Canny
• Funzione Canny del modulo imgproc
• Frame della camera in input
• Possibilità di modificare i valori delle due soglie di
thresholding
• Soglie di default settate rispettivamente a 100 e 200
OpenCV Android
17
Operatore di Sobel
• Funzione Sobel del modulo imgproc
• Possibilità di cercare solo i lati orizzontali, solo quelli
verticali oppure entrambi (opzione selezionata
inizialmente)
OpenCV Android
18
Thresholding (1)
• Funzione threshold del modulo imgproc
• Possibilità di modificare la soglia di thresholding
attraverso il tasto opzioni (soglia di thresholding
settata di default a 100)
OpenCV Android
19
Thresholding (2)
• Ulteriore modalità di thresholding (selezionabile dal
tasto opzioni) disponibile attraverso la funzione
adaptiveThreshold del modulo imgproc
• In questo caso la soglia di thresholding viene
determinata automaticamente in base al contenuto
dell’immagine corrente
• Uso di un filtro mediano per ridurre il rumore
OpenCV Android
20
Operazioni morfologiche (1)
OpenCV Android
21
Operazioni morfologiche (2)
• Funzione getStructuringElement di imgproc per la
creazione dell’elemento strutturante (rettangolo,
croce o ellisse)
• Operazioni morfologiche implementate:
– Erosione: funzione erode di imgproc
– Dilatazione: funzione dilate di imgproc
– Chiusura e apertura: funzione morphoLogyEx di imgproc
• Possibilità tramite il tasto opzioni di modificare la
grandezza dell’elemento strutturante (settata di
default a 5x5)
OpenCV Android
22
Canali RGB
• Funzione extractChannel del modulo core
• Funzione alternativa split del modulo core che però
presenta problemi di saturazione della memoria
• Scelta del canale da visualizzare tramite il tasto
opzioni (canale rosso visualizzato inizialmente)
OpenCV Android
23
Detect del colore HSV (1)
OpenCV Android
24
Detect del colore HSV (2)
• Funzione cvtColor del modulo imgproc per convertire
l’immagine nello spazio HSV
• Funzione inRange del modulo core per il detect del
colore (rosso, verde o blu)
• Tonalità espressa in 180°
• Doppio range per il rosso
• Singolo per verde e blu
OpenCV Android
25
Riconoscimento di forme (1)
• Ricerca dei contorni dell’immagine filtrata attraverso
l’applicazione di Canny
OpenCV Android
26
Riconoscimento di forme (2)
• Filtraggio dei contorni troppo piccoli
• Ricerca dei migliori poligoni che approssimano i
contorni trovati
OpenCV Android
27
Riconoscimento di forme (3)
• Funzione findContours del modulo imgproc per trovare
i contorni in base ad una determinata approssimazione
• Funzione approxPolyDP del modulo imgproc per
determinate il miglior poligono per ogni contorno
trovato
• Ricerca di poligoni che approssimano meglio
quadrilateri, pentagoni, esagoni, ettagoni ed ottagoni
• I cerchi vengono approssimati con 8 lati
• Funzione drawContours del modulo core per disegnare
sul frame originale i poligoni riconosciuti
OpenCV Android
28
Link utili
•
•
•
•
•
•
Eclipse: http://www.eclipse.org/
OpenCV: http://opencv.org/
SDK Android: https://developer.android.com/sdk/
API OpenCV: http://docs.opencv.org/java/
API Android: http://developer.android.com/reference/classes.html
Tutorial: http://docs.opencv.org/doc/tutorials/tutorials.html
OpenCV Android
29