OpenCV 3.0 con Python – Installazione su Raspberry

meccanismo-complesso-opencv-python-installazione-su-raspberry

Introduzione

Per chi viene dal mondo C++ ed ha avuto a che fare con l’analisi delle immagini ha certamente conosciuto la libreria OpenCV. Ultimamente, grazie al sempre maggior utilizzo del linguaggio di programmazione Python, molte librerie sviluppate originariamente in C/C++, possono essere utilizzate anche con questo linguaggio tramite i Python Bindings. La libreria OpenCV è una di queste, giunta alla versione 3.1 (rilasciata a dicembre dell’anno scorso), può essere utilizzata anche all’interno del linguaggio Python.

In questo articolo vedremo come compilare il codice sorgente e installare la versione 3.0 di OpenCV su Raspberry. Questo articolo è quindi di introduzione ad una serie di articoli che tratteranno a fondo l’argomento. Quindi se si vuole lavorare con OpenCV è necessario saperla compilare ed installare sul proprio sistema: in questo caso Raspbian.

La libreria OpenCV e Python

OpenCV è una libreria scritta in C++,  specializzata per la Computer Vision e l’Image Analysis. Questa potentissima libreria, ideata da Gary Bradsky, nacque come progetto Intel e fu rilasciata la prima volta nel 2000. Poi con il tempo fu rilasciata con licenza open source, e da allora si è via via sempre più diffusa, giungendo alla versione 3.1. In questo momento, OpenCV supporta molti algoritmi correlati alla Computer Vision e al Machine Learning ed è in espansione giorno dopo giorno.

La sua utilità e diffusione è dovuta proprio al suo antagonista: Matlab. Infatti per chi ha bisogno di lavorare con l’Image Analysis può seguire solo due vie: acquistare i pacchetti Matlab oppure compilare e installare la versione opensource di OpenCV. Bene, è facile capire perchè molti hanno optato per la seconda scelta.

opencv-vs-matlab-in-costs

Installazione di OpenCV su Raspberry

Sono stato alla ricerca di molti tutorial presenti in rete e devo dire che ce ne sono molti. Ma dopo 5 o 6 tentativi, andati male a dir la verità, ho finalmente trovato un articolo interessante scritto da Adrian Rosebrock che riguarda proprio la procedura di compilazione ed installazione di OpenCV 3.0 su Raspberry.  L’ho seguita in dettaglio e non ho avuto alcun problema (eccetto per make -j4 che vedrete in seguito).

Prerequisiti per l’installazione

Per prima cosa è necessario aggiornare qualsiasi pacchetto esistente su Raspbian, quindi aggiorniamo il package manager apt-get. Inoltre, sarebbe opportuno anche aggiornare il firmware del Raspberry e questo lo possiamo fare con rpi-update.

Adesso che abbiamo aggiornato praticamente tutto il sistema, facciamo il reboot.

Una volta che Raspbian è ripartito è il momento di installare, se non presenti, tutti i developer tools:

OpenCV è una libreria grafica che lavora prettamente su immagini, molte delle quali sono in formato compresso. Sarà quindi opportuno installare delle librerie che permettano di lavorare su questo genere di formati come JPEG, PNG e TIFF.  Installiamo quindi i seguenti pacchetti.

Ma OpenCV lavora anche su video e quindi anche questi spesso si trovano in formati compressi. Allo stesso modo che abbiamo fatto con le immagini, importiamo i pacchetti specifici per i video stream.

Infine, adesso che abbiamo la possibilità di gestire molti formati video e immagine, dobbiamo caricare la libreria di sviluppo GTK. Questa libreria ci permetterà di lavorare con il modulo highgui di OpenCV, con cui è possibile creare interfacce grafiche utente (GUI).

Inoltre, esistono alcuni pacchetti aggiuntivi che aiutano OpenCV ad effettuare calcoli matriciali in modo ottimizzato.

Infine installiamo i moduli di sviluppo di Python, per poter utilizzare gli header file durante la compilazione degli OpenCV Python Bindings.

Il codice sorgente di OpenCV

A questo punto che tutti i prerequisiti per l’installazione sono stati completati, è giunto il momento di scaricare la versione 3.0 del codice sorgente di OpenCV. Faremo il download del codice sorgente direttamente dal repository di OpenCV.  Se desideri installare versioni successive alla 3.0, ti basterà sostituire la versione 3.0.0 con quella desiderata.

Inoltre installeremo anche il codice sorgente di alcuni moduli extra che non sono ufficialmente incorporati in OpenCV ma che comunque forniscono molte funzioni utili. Il pacchetto è opencv_contrib. Deve essere installato della versione corrispondente ad OpenCV, quindi se hai usato una versione diversa dalla 3.0.0, sostituisci anche qui il numero di versione.

Il download del codice sorgente non dovrebbe richiedere che pochi minuti di tempo.

Impostazione di Python

Prima di cominciare la compilazione di OpenCV, faremo una serie di operazioni utili per impostare il sistema ad un corretto uso dei pacchetti di Python.

Tutti pacchetti di Python vengono generalmente installati e gestiti dal comando pip. Se per esempio non lo avete installato sul vostro Raspbian, potete farlo con i seguenti comandi:

Un altro aspetto interessante per chi lavora in Python è l’utilizzo degli ambienti virtuali (virtualenv). L’installazione e l’attivazione dei virtualenv non è obbligatoria, però è molto consigliata per chiunque voglia lavorare con molti applicazioni in Python che richiedono l’installazione di molti pacchetti. Spesso inoltre si vuole lavorare sia con Python 2.7 che con Python 3.x.

Quindi se si vuole lavorare con OpenCV, e ancora di più se si vuole compilarlo da codice sorgente, si applicheranno molte modifiche al sistema, ed inoltre moltissimi moduli in Python verranno installati, aggiornati, ecc. Le dipendenze tra di essi è spesso legata a specifiche versioni di ciascuno di essi e quindi si rischia spesso di creare conflitti. Applicativi Python già preinstallati potrebbero non funzionare correttamente, stessa cosa per OpenCV se nuovi applicativi Python verranno installati in seguito.

Quindi appare opportuno installare virtualenv e virtualenvwrrapper sul proprio Raspbian. Questi due pacchetti ci permetteranno di creare ambienti Python separati per ciascun progetto su cui stiamo lavorando.

Per rendere effettiva l’installazione di questi due pacchetti è opportuno aggiornare il file ~/.bashrc aggiungendo alla fine le righe seguenti.

Questo veloce aggiornamento ci assicurerà di caricare sia virtualenv che virtualenvwrapper ogni volta che fai il login.

Adesso che abbiamo aggiornato il file, sarà necessario caricare tutte le modifiche effettuate in modo che vengano caricate dal sistema. Per fare il reload lanciamo.

E’ probabile che ogni volta che farai ripartire il sistema e aprirai una sessione da terminale, dovrai rilanciare questo comando, per tenere aggiornata la sessione.

Adesso creiamo il nuovo ambiente virtuale che utilizzeremo esclusivamente per OpenCV.

Scrivendo tale comando avremo un ambiente virtuale in cui sarà attivo Python2.7. Se invece volessimo un ambiente virtuale in cui è Python3.x ad essere attivo, dobbiamo scrivere:

Lanciando il nuovo ambiente virtuale, noteremo accanto al prompt il nome del virtualenv attivo racchiuso tra le partentesi

In futuro, ogni volta che eseguirai il reboot del sistema, potrai riattivare questo virtualenv, digitando

Adesso che abbiamo attivato l’ambiente virtuale è giunto il momento di installare la prima libreria in Python, chiamata NumPy. Questa libreria è forse una delle librerie più importanti per il calcolo scientifico ed ingegneristico e contiene all’interno tantissimi strumenti di calcolo. Moltissime librerie di analisi e scientifiche si basano su NumPy e OpenCV è una di queste.

numpy

L’installazione di questa libreria su Raspbian richiede un bel po di tempo. Aspettatevi un tempo tra i 15 ed i 20 minuti. Quindi non vi allarmate e attendete il termine dell’installazione.

Compilazione ed installazione di OpenCV

Adesso che abbiamo completato sia i prerequisiti che i requisiti, passiamo finalmente alla compilazione ed all’installazione vera e propria di OpenCV.

Ricordo che siamo ancora dentro il virtualenv cv.

Ora possiamo compilare OpenCV utilizzando tutti e quattro i core del tuo compilatore.

La compilazione, anche con tutti e quattro i core attivi, impiega più di un’ora e mezza. Controllate se l’installazione è andata a buon fine.

Per quanto mi riguarda, per ben due volte l’installazione mi ha dato stranissimi errori. Cosa che ho risolto utilizzando un solo core. Quindi se vi trovate nello stesso mio caso, potete far ripartire la compilazione utilizzando i due seguenti comandi:

Al termine della compilazione, finalmente passiamo all’installazione.

Se avete scelto Python 2.7, OpenCV dovrebbe essere installato su /usr/local/lib/python2.7/site-packages e dato che lavoriamo sull’ambiente virtuale cv che si trova nella home directory, si dovrà fare il sym-link

Se invece avete scelto Python 3.x allora OpenCV dovrebbe essere presente su su /usr/local/lib/python3.x/site-packages. Anche in questo caso stiamo lavorando sull’ambiente virtuale cv che si trova nella home directory, e quindi si dovrà fare il sym-link

L’installazione è completa.

Test di verifica per l’installazione

Adesso non ci rimane che controllare se la compilazione e l’installazione sono andati correttamente.

Chiudiamo la sessione del terminale e ne apriamo una nuova. Testiamo se funziona il workon sull’ambiente virtuale.

E poi testiamo la corretta installazione dei Python Bindings di OpenCV, vedendo se il modulo cv2  è caricabile da una sessione Python.

Conclusione

In questo articolo hai visto come compilare ed installare la libreria grafica OpenCV per Python tramite una serie di istruzioni. Nei prossimi articoli potrai vedere in dettaglio il funzionamento di questa libreria, capirne il suo utilizzo e testare le sue funzionalità grazie ad una serie di esempi pratici. A presto allora…

Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.