E’ da più di un anno che sono presenti alcuni articoli pubblicati su questo sito che fanno uso della fantastica libreria OpenCV 3. E’ da poco uscita la nuova versione OpenCV 4 e come da prassi pubblicheremo la procedura di compilazione ed installazione su sistemi Linux Ubuntu 18.
Le nuove caratteristiche della versione OpenCV 4
In questa procedura utilizzeremo la versione di Python 3.x. Ormai dobbiamo tutti cominciare a prendere dimestichezza con questa versione, che è ormai diventato lo standard ufficiale del linguaggio.
Installazione delle dipendenze di OpenCV 4
Prima di cominciare la compilazione e l’installazione della libreria OpenCV 4, sarà necessario installare nel nostro sistema alcuni pacchetti fondamentali per i vari processi che vedremo avanti. Soprattutto alcuni tool necessari per la compilazione.
Quindi la prima cosa da fare è accertarsi che il nostro sistema Ubuntu sia perfettamente aggiornato. Su Ubuntu 18 non è più necessario aggiungere apt-get (va bene ancora) ma si può utilizzare direttamente apt.
sudo apt update
sudo apt upgrade
Adesso che abbiamo aggiornato il sistema comciamo ad installare questi importantissimi tool di sviluppo che ci serviranno per la compilazione del codice sorgente OpenCV 4
sudo apt install build-essential cmake unzip pkg-conf
Oltre ai pacchetti precedenti vi sono una serie di librerie I/O necessarie ad OpenCV 4 per gestire i formati di immagine e video.
sudo apt install libjpeg-dev libpng-dev libtiff-dev
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-de
Adesso un’altra importante libreria necessaria per una corretta compilazione del codice sorgente di OpenCV 4 è la libreria GTK, utile per la gestione delle GUI (interfacce grafiche per l’utente).
sudo apt install libgtk-3-de
Poi aggiungiamo altre due librerie necessarie per l’ottimizzazione matematica di OpenCV: Fortran e Atlas.
sudo apt install libatlas-base-dev gfortran
Ed infine, come detto in precedenza, ci baseremo sulla versione di Python 3.x. Quindi se ancora non fosse installata sul tuto sistema è giunto il momento di farlo.
sudo apt install python3-dev
Download del codice sorgente di OpenCV 4
Per installare OpenCV 4 sul nostro sistema sono necessarie due diversi pacchetti:
- opencv
- opencv_contrib
Quindi cominciamo con scaricare questi pacchetti direttamente nel nostro file system.
cd ~
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.0.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.0.0.zip
Una volta scaricati entrambe i pacchetti ZIP possiamo fare l’estrazione.
unzip opencv.zip
unzip opencv_contrib.zip
Una volta estratto il loror contenuto troveremo nella nostra directory di lavoro due nuove cartelle con riportato nel nome la versione relativa. Rinominiamo i due pacchetti
mv opencv-4.0.0 opencv
mv opencv_contrib-4.0.0 open_contrib
Configurazione dell’ambiente virtuale Python3-OpenCV4
Quando si vuole compilare una libreria complessa come OpenCV4, ricca di correlazioni con un’ampia serie di pacchetti e librerie (parliamo di pacchetti in Python), è buona prassi creare un ambiente virtuale specifico. Gli ambienti virtuali in Python ci permettono di lavorare su di un progetto (come può essere OpenCV4) in perfetto isolamento senza andare ad influire minimamente su altri progetti in Python che molto probabilmente utilizzeranno una diversa configurazione di pacchetti e versioni.
L’installazione diretta di OpenCV4 sull’ambiente di default di Python rischierebbe di compromettere il perfetto funzionamento di altri progetti precedenti, oppure precluderene altri nuovi. Questo perchè con l’andare avanti nel tempo alcuni progetti avranno delle librerie in comune, alcune delle quali saranno necessarie in due versioni diverse. Aggiornando una di queste librerie per il funzionamento di un progetto avrà spesso delle conseguenze indesiderate su altri progetti precedenti.
Invece grazie agli ambienti virtuali si potranno utilizzare tutti i progetti che vogliamo, persino lavorare con Python2 e Python3 contemporaneamente, o lavorare con due versioni diverse di OpenCV4. Per esempio potrete lasciare la vostra vecchia versione di OpenCV3 (magari in Python 2) sul vostro sistema ed installare in un ambiente virtuale a parte la nuova versione OpenCV4.
Quindi installiamo due pacchetti necessari per realizzare e gestire gli ambienti virtuali: virtualenv e virtualenvwrapper.
sudo pip3 install virtualenv virtualenvwrappe
Per completare l’installazione di questi due tool, dobbiamo modificare un particolare file nascosto nella nostra HOME directory. Apri con un editor di testo il file .bashrc.
sudo nano ~/.bashrc
scorri fino alla fine del file, e proprio in fondo aggiungi le seguenti righe di codice.
#virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALNVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
Poi salva il file ed esci dall’editor di testo. Adesso fai eseguire il programma per aggiornare queste ultime modifiche.
source ~/.bashrc
Adesso creiamo l’ambiente virtuale per Python3+OpenCV4
mkvirtualenv cv4 -p python3
Abbiamo creato così un ambiente virtuale completamente isolato, che potremo attivare ogni volta lanciando il seguente comando:
workon cv4
Riconoseremo l’attivazione dell’ambiente virtuale dal testo presente nella riga di comando.
(cv4) user@hostname: ~$
Come potete vedere il nome dell’ambiente virtuale è riportato all’inizio tra due parentesi tonde.
Installazione di Numpy nel nuovo ambiente virtuale
Proprio a riprova di quanto detto in precedenza, installiamo uno dei paccchetti Python utili per OpenCV4: Numpy.
(cv4)$ pip install numpy
Quindi avremo la libreria Numpy installata nel nostro ambiente virtuale cv4. Questa non sarà accessibile (né visibile) a Python di default del sistema e quando l’ambiente virtuale verrà rimosso, lascerà la vostra configurazione di default di Python completamente inalterata.
La compilazione di OpenCV4 con CMake
Adesso possiamo uscire dal nostro ambiente virtuale e passare direttamente alla compilazione dei OpenCV4
cd ~/opencv
mkdir build
cd build
Per prima cosa dobbiamo configurare il build di OpenCV4 con CMake
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D OPENCV_ENABVLE_NONFREE=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D PYTHON_EXECUTABLE=~/.virtualenvs/cv4/bin/python \ -D BUILD_EXAMPLES=ON .
Adesso possiamo finalmente compilare. Questa operazione richiederà abbondante tempo, quindi prendete l’occasione per farvi una pausa (magari un caffè).
make -j4
Nel mio caso ho utilizzato l’opzione -j4 perchè il mio sistema lavora su 4 processori. Ma utilizzata il valore corrispondente al vostro sistema. Per conoscere il numero di processori presenti sul vostro sistema lanciate il comando:
nproc
Una volta completata l’installazione, possiamo installare il compilato nel nsotro sistema.
sudo make install
sudo ldconfig
Aggiungere il Link di OpenCV4 all’ambiente virtuale
Adesso dobbiamo fare in modo di aggiungere un link per rendere accessibile il compilato di OpenCV4 nel nostro ambiente virtuale. Quindi per prima cosa attiviamo l’ambiente virtuale.
workon cv4
Adesso che siamo entrati nell’ambiente virtuale possiamo creare il link simbolico. Per prima cosa accedete nella directory dei pacchetti della versione Python che state utilizzando nel virtualenv.
cd ~/.virtualenv/cv4/lib/python3.6/site-packages
ln -s /usr/local/python/cv2 cv2
cd ~
Questo passo è molto importante, perché senza questo link non sarebbe possibile importare opencv in Python.
Test dell’installazione di Python
Adesso l’installazione di Open CV 4 su Ubuntu è completata. Possiamo controllare se tutto è andato correttamente,
workon cv4
python
>>> import cv2
>>> cv2.__version__
E adesso Buon divertimento! đŸ˜‰