In questo tutorial, imparerete come installare con pip OpenCV su Ubuntu, macOS e Raspberry Pi.
Nei precedenti tutorial sull’installazione di OpenCV ho raccomandato di compilare da sorgente; tuttavia, nell’ultimo anno è diventato possibile installare OpenCV tramite pip, il gestore di pacchetti di Python.
Mentre l’installazione da sorgente vi darà il maggior controllo sulla vostra configurazione di OpenCV, è anche la più difficile e la più lunga.
Se stai cercando il modo più veloce possibile per installare OpenCV sul tuo sistema, devi usare pip per installare OpenCV (ma ci sono alcune cose che potrebbero farti inciampare lungo la strada, quindi assicurati di leggere il resto di questa guida).
2019-11-21 Aggiornamento: un aggiornamento è stato rilasciato a questo post del blog a causa di problemi di compatibilità con OpenCV sul Raspberry Pi 4 con BusterOS usando questo metodo di installazione pip. Assicuratevi di trovare gli aggiornamenti tramite ctrl + f
cercando “2019-11-21 Update”.
Per imparare come installare OpenCV con pip sul vostro sistema, continuate a leggere.
State cercando il codice sorgente di questo post?
Salta direttamente alla sezione Downloads
pip install opencv
Nel resto di questo tutorial, descriverò brevemente i pacchetti OpenCV che puoi installare tramite pip, il gestore di pacchetti di Python.
Da lì, dimostrerò come installare OpenCV con pip su Ubuntu, macOS e Raspberry Pi.
Infine, passerò in rassegna alcuni problemi comuni che si possono incontrare quando si usa pip per installare OpenCV.
Vorrei sottolineare un importante avvertimento su questo metodo di installazione di OpenCV prima di iniziare.
Le versioni ospitate da PyPi/PiWheels di OpenCV che discuteremo oggi non includono algoritmi “non liberi” come SIFT, SURF, e altri algoritmi brevettati. Questo è un ottimo metodo per installare OpenCV se avete bisogno di un ambiente veloce in cui non avrete bisogno di eseguire programmi contenenti gli algoritmi non liberi – se questo non è il caso, dovrete completare una compilazione completa di OpenCV.
I due pacchetti pip OpenCV: opencv-python e opencv-contrib-python
Prima di iniziare voglio ricordarvi che i metodi che vi presento oggi sono pacchetti OpenCV non ufficiali precostituiti che possono essere installati tramite pip – non sono pacchetti OpenCV ufficiali rilasciati da OpenCV.org.
Solo perché non sono pacchetti ufficiali non significa che dovresti sentirti a disagio nell’usarli, ma è importante che tu capisca che non sono approvati e supportati direttamente dal team ufficiale di OpenCV.org.
Tutto ciò detto – ci sono quattro pacchetti OpenCV che sono installabili con pip sul repository PyPI:
- opencv-python: Questo repository contiene solo i moduli principali della libreria OpenCV. Se sei un lettore di PyImageSearch non vuoi installare questo pacchetto.
- opencv-contrib-python: Il repository opencv-contrib-python contiene sia i moduli principali che i moduli contrib – questa è la libreria che ti consiglio di installare in quanto include tutte le funzionalità di OpenCV.
- opencv-python-headless: Come opencv-python ma senza funzionalità GUI. Utile per sistemi headless.
- opencv-contrib-python-headless: Come opencv-contrib-python ma senza funzionalità GUI. Utile per sistemi senza testa.
Ancora una volta, nella stragrande maggioranza delle situazioni si vorrà installare opencv-contrib-python
sul proprio sistema.
Non si vuole installare sia opencv-python
che opencv-contrib-python
– sceglierne uno solo.
Come installare OpenCV con pip su Ubuntu
Hai due opzioni per installare OpenCV su Ubuntu con pip:
- Installare nel vostro sistema
site-packages
- Installare nel
site-packages
di un ambiente virtuale (preferito)
Prima di tutto, installare pip
Se non avete pip, dovrete prima ottenerlo:
$ wget https://bootstrap.pypa.io/get-pip.py$ sudo python3 get-pip.py
Opzione A: Installa OpenCV sul tuo sistema Ubuntu con pip
Non raccomanderei questo metodo a meno che tu non abbia un caso d’uso particolare in cui non vuoi ambienti Python isolati e indipendenti.
Installiamo con pip opencv-contrib-python sul nostro sistema:
$ sudo pip install opencv-contrib-python
In pochi secondi, OpenCV è pronto per essere inserito nei pacchetti-sito del vostro sistema!
Opzione B: installare OpenCV su Ubuntu in un ambiente virtuale con pip
Ci sono enormi vantaggi negli ambienti virtuali Python.
Il vantaggio principale è che puoi sviluppare più progetti sul tuo sistema con pacchetti isolati (molti con dipendenze di versione) senza dover confondere le acque del tuo sistema. Siete anche liberi di aggiungere e rimuovere ambienti virtuali man mano che andate avanti.
In parole povere: Gli ambienti virtuali Python sono una best practice per lo sviluppo di Python. È probabile che dovreste saltare sul carro.
I miei strumenti preferiti sono virtualenv
e virtualenvwrapper
ma potreste scegliere un’alternativa come venv o Anaconda (conda in breve).
Ecco come installare virtualenv
e virtualenvwrapper
, entrambi vivranno nel vostro sistema site-packages
e gestiranno i site-packages dell’ambiente virtuale di ogni progetto:
$ pip install virtualenv virtualenvwrapper
Prima di continuare, è necessario aggiungere alcune righe al vostro ~/.bashrc
profilo. Aprite il file usando nano
vim
, o emacs
e aggiungete queste linee alla fine:
# virtualenv and virtualenvwrapperexport WORKON_HOME=$HOME/.virtualenvsexport VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3source /usr/local/bin/virtualenvwrapper.sh
Salvate il file. Poi “sorgente” nel vostro terminale:
$ source ~/.bashrc
Vedrete alcuni output del terminale che impostano virtualenvwrapper. Ora avete accesso a nuovi comandi da terminale:
- Creare un ambiente con
mkvirtualenv
. - Attivare un ambiente (o passare ad uno diverso) con
workon
. - Disattiva un ambiente con
deactivate
. - Rimuovi un ambiente con
rmvirtualenv
. - Assicurati di leggere i documenti!
Creiamo un ambiente virtuale Python 3 per OpenCV chiamato cv:
$ mkvirtualenv cv -p python3
E ora con una bacchetta magica (pip), potete installare OpenCV in pochi secondi nel vostro nuovo ambiente:
$ pip install opencv-contrib-python
Come installare OpenCV con pip su macOS
MacOS è simile a Ubuntu per installare OpenCV con pip.
Ancora una volta, avete due opzioni per installare OpenCV su macOS con pip:
- Installare nel vostro sistema
site-packages
- Installare nel
site-packages
di un ambiente virtuale (preferito)
Installare pip
Se non avete pip, dovrete prima ottenerlo:
$ wget https://bootstrap.pypa.io/get-pip.py$ sudo python3 get-pip.py
Opzione A: installa OpenCV sul tuo sistema macOS con pip
Non farlo.
Perché? In realtà ti consiglio di passare all’opzione B e di usare un ambiente virtuale.
Ok, bene, se insisti nell’installazione sul tuo sistema macOS, allora è altrettanto facile come pip installare OpenCV via:
$ sudo pip install opencv-contrib-python
In una manciata di secondi, OpenCV è pronto ad andare nei site-packages del tuo sistema.
Opzione B: installare OpenCV su macOS in un ambiente virtuale con pip
Proprio come gestire i pacchetti è un gioco da ragazzi con pip….
… la gestione dei progetti e delle loro dipendenze è un gioco da ragazzi con gli ambienti virtuali.
Si dovrebbero usare gli ambienti virtuali Python se si fa sul serio con lo sviluppo della computer vision (o con qualsiasi altro sviluppo).
Non mi interessa quale sistema usiate (che sia virtualenv
venv
, o conda
/Anaconda), semplicemente imparate ad usarne uno e mantenetelo.
Ecco come installare virtualenv e virtualenvwrapper, entrambi i quali vivranno nei vostri site-packages di sistema e gestiranno i site-packages dell’ambiente virtuale di ogni progetto:
$ pip install virtualenv virtualenvwrapper
Da lì, è necessario aggiungere le seguenti righe al vostro ~/.bash_profile
(notare che per macOS il nome del file è .bash_profile
e per Ubuntu è .bashrc
.
Aprire il file usando nano
vim
, o emacs
nano
arriva sulla maggior parte dei sistemi):
$ nano ~/.bash_profile
…e aggiungere queste righe alla fine:
# virtualenv and virtualenvwrapperexport WORKON_HOME=$HOME/.virtualenvsexport VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3source /usr/local/bin/virtualenvwrapper.sh
Salvare il file – se state usando nano
le scorciatoie da tastiera sono elencate in fondo alla finestra.
Poi “sorgente” nel tuo terminale:
$ source ~/.bash_profile
Vedrai alcune linee di output del terminale che indicano che virtualenvwrapper è impostato. Ora avete accesso a nuovi comandi da terminale:
-
mkvirtualenv
: Crea un nuovo ambiente virtuale. -
workon
: Attiva/cambia un ambiente virtuale. Ricorda, puoi avere tutti gli ambienti che vuoi. -
deactivate
: Salta fuori da un ambiente virtuale e lavorerai con il tuo sistema. -
rmvirtualenv
: Cancella un ambiente virtuale. - Assicurati di leggere i documenti!
Creiamo un ambiente virtuale Python 3 per OpenCV chiamato cv:
$ mkvirtualenv cv -p python3
E ora, usando pip, e con un batter d’occhio, potete installare in pochi secondi OpenCV su macOS nel vostro nuovo ambiente:
$ pip install opencv-contrib-python
Come installare OpenCV con pip su Raspberry Pi
Prima in questo post ho menzionato che uno dei lati negativi dell’installazione di OpenCV è che non si ha alcun controllo sulla compilazione stessa – i binari sono precompilati per voi, il che, pur essendo piacevole, significa anche che non è possibile includere eventuali ottimizzazioni aggiuntive.
Per il Raspberry Pi, siamo fortunati.
Dave Jones (creatore del modulo picamera
Python) e Ben Nuttall della comunità Raspberry Pi gestiscono piwheels.org, un repository di pacchetti Python che fornisce ruote ARM (cioè, pacchetti binari precompilati) per il Raspberry Pi.
Utilizzando PiWheels sarete in grado di installare con pip OpenCV in una manciata di secondi (lo stesso vale per altre librerie Python che possono richiedere molto tempo per la compilazione, tra cui NumPy, SciPy, scikit-learn, etc.).
Come si istruisce il comando pip per utilizzare PiWheels?
La risposta breve è “Niente!”
Se state usando Raspbian Stretch sarete felici di sapere che il comando pip controllerà PiWheels per un binario precompilato prima di controllare PyPI, permettendo al vostro Pi di risparmiare un sacco di cicli di CPU (e voi un sacco di tempo di installazione).
Inoltre, quando Ben e Dave hanno messo insieme il binario di OpenCV per PiWheels mi hanno chiesto quali istruzioni avrebbero dovuto usare – io ho raccomandato la mia installazione ottimizzata di OpenCV per il Raspberry Pi – che sono esattamente le istruzioni che hanno seguito!
Se finisci per usare pip per installare OpenCV sul tuo Raspberry Pi, stai sicuro che stai usando la versione ottimizzata.
Iniziamo a imparare come pip installa OpenCV sul nostro Raspberry Pi.
Installate i prerequisiti sul vostro Raspberry Pi
Il Raspberry Pi richiede l’installazione di alcuni pacchetti di sistema prima di iniziare:
$ sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-100$ sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5$ sudo apt-get install libatlas-base-dev$ sudo apt-get install libjasper-dev
Installare pip sul vostro Raspberry Pi
Il gestore di pacchetti Python, “pip”, può essere ottenuto tramite wget:
$ wget https://bootstrap.pypa.io/get-pip.py$ sudo python3 get-pip.py
Ora avete due opzioni:
- Installare OpenCV nel vostro
site-packages
Python globale sul vostro Raspberry Pi - Installare OpenCV in un ambiente virtuale sul vostro Raspberry Pi
Opzione A: Installa OpenCV sul tuo sistema Raspberry Pi con pip
Non raccomanderei questa opzione se vuoi essere in grado di usare diverse versioni di OpenCV in ambienti isolati.
Ma molte persone utilizzano i loro Raspberry Pi per un solo scopo/progetto e non hanno bisogno di ambienti virtuali.
Detto questo, è un bel casino da pulire se si cambia idea in seguito e si vogliono usare ambienti virtuali, quindi raccomanderei di saltare questa opzione e seguire l’opzione B.
Per installare OpenCV sul vostro sistema Raspberry Pi, assicuratevi di usare sudo in questo modo:
$ sudo pip install opencv-contrib-python==4.1.0.25
2019-11-21 Aggiornamento: I lettori hanno segnalato che alcune versioni di OpenCV 4 installate tramite pip non funzionano correttamente su Raspberry Pi. Si può incontrare un "undefined symbol: __atomic_fetch_add8"
per libatomic
errore quando si import cv2
da Python se non si utilizza la versione specifica di OpenCV menzionata nel blocco di codice sopra.
In una manciata di secondi, OpenCV è pronto ad andare nel sito-pacchetti del vostro Raspberry Pi insieme a qualsiasi altro pacchetto che potreste aver installato.
Opzione B: installare OpenCV in un ambiente virtuale con pip sul vostro Raspberry Pi
Gli ambienti virtuali sono sicuramente la strada da percorrere se il vostro Raspberry Pi ha molteplici scopi (o se siete come me e testate continuamente la compatibilità del codice tra varie versioni di software per i post del blog?).
Ecco come installare virtualenv e virtualenvwrapper, gli strumenti che uso per farlo:
$ pip install virtualenv virtualenvwrapper
Poi dovete aggiungere le seguenti linee al vostro ~/.bashrc
. Aprite il file usando nano
vim
, o emacs
e aggiungete queste righe alla fine:
# virtualenv and virtualenvwrapperexport WORKON_HOME=$HOME/.virtualenvsexport VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3source /usr/local/bin/virtualenvwrapper.sh
Salvate il file. Poi “source it” nel vostro terminale:
$ source ~/.bashrc
Sarà stampato l’output del terminale che indica che virtualenvwrapper è pronto. Assicuratevi di controllare se ci sono errori.
Ora avete accesso ai nuovi comandi del terminale:
- Create un ambiente con
mkvirtualenv
. - Attivare un ambiente (o passare a uno diverso) con
workon
. - Disattivare un ambiente con
deactivate
. - Rimuovi un ambiente con
rmvirtualenv
. - Assicurati di leggere la documentazione!
Per creare un ambiente virtuale Python 3 che ospiterà OpenCV e altri pacchetti che installerete, usate semplicemente mkvirtualenv e il comando seguente:
$ mkvirtualenv cv -p python3
Ora avete un ambiente virtuale chiamato cv
. Potete attivarlo in qualsiasi momento tramite:
$ workon cv
E ora con un colpo di spugna, potete installare OpenCV in cv
:
$ pip install opencv-contrib-python==4.1.0.25
2019-11-21 Aggiornamento: I lettori hanno segnalato che alcune versioni di OpenCV 4 installate tramite pip non funzionano correttamente sul Raspberry Pi. Si può incontrare un "undefined symbol: __atomic_fetch_add8"
per libatomic
errore quando si import cv2
da Python se non si utilizza la versione specifica di OpenCV menzionata nel blocco di codice sopra.
Questo è tutto quello che c’è da fare con PiWheels!
Scommetto che stai usando la PiCamera come sensore di immagini. Potete installare il modulo Python usando il seguente comando (fate attenzione alle virgolette):
$ pip install "picamera"
Testando la nostra installazione pip di OpenCV
Sapevate che OpenCV 3.3+ ha un modulo DNN che può eseguire modelli di Deep Learning?
Potresti essere sorpreso, ma la tua versione di OpenCV può fare questo fuori dalla scatola ora, con poco o nessun software aggiuntivo.
Eseguiremo il rilevamento di oggetti in un video con un rilevatore di colpi singoli di MobileNet.
Ecco cosa dovete installare per prima cosa (assumendo un cv
ambiente virtuale):
$ workon cv$ pip install imutils$ pip install "picamera" # if you're using a Raspberry Pi
Ora controllate di avere tutto il software pronto aprendo una shell Python:
$ workon cv$ pythonPython 3.6.3 (default, Oct 4 2017, 06:09:15) on darwinType "help", "copyright", "credits" or "license" for more information.>>> import cv2>>> cv2.__version__'4.0.1'>>> import imutils>>>
Il Raspberry Pi mostrerà una versione diversa di Python 3, il che è previsto.
Ora è il momento di scaricare il codice.
Assicuratevi di usare la sezione “Downloads” di questo post del blog per scaricare il codice sorgente + la rete neurale pre-addestrata MobileNet SSD.
Da lì, eseguire il seguente comando:
$ python real_time_object_detection.py \--prototxt MobileNetSSD_deploy.prototxt.txt \--model MobileNetSSD_deploy.caffemodel loading model... starting video stream... elapsed time: 55.07 approx. FPS: 6.54
Sto usando un Macbook Pro. Un framerate di 6 FPS è abbastanza buono usando una CPU su un laptop.
I Raspberry Pis hanno risorse limitate, quindi possiamo sfruttare alcuni trucchi per creare l’illusione di FPS più elevati. Se siete sul Raspberry Pi, eseguite il seguente comando:
$ python pi_object_detection.py \--prototxt MobileNetSSD_deploy.prototxt.txt \--model MobileNetSSD_deploy.caffemodel loading model... starting process... starting video stream... elapsed time: 48.55 approx. FPS: 27.83
Qui ho creato l’illusione di 27 FPS veloci sul Raspberry Pi mentre la rete neurale in background è solo in grado di elaborare 0.9 FPS.
Come è possibile?
Threading e code.
È un po’ avanzato, ma se leggete il post originale del blog (per il Raspberry Pi), capirete il processo. Inoltre, sarete in grado di impressionare i vostri amici e familiari.
A cosa fare attenzione quando si usa pip per installare OpenCV
Per cominciare, non tutte le distribuzioni Python avranno una versione di OpenCV che sia installabile con pip.
Le nuove versioni di Python e i nuovi sistemi operativi (per non parlare delle vecchie versioni che hanno raggiunto la fine della loro vita) potrebbero non avere una versione di OpenCV pronta a partire nel repository PyPI poiché la comunità open source non ha ancora avuto la possibilità di rilasciare tale versione.
In queste situazioni si può o:
- Aspettare che i binari per la propria combinazione di Python e sistema operativo siano caricati.
- O quello che la mia raccomandazione sarebbe – compilare dai sorgenti (Ubuntu, macOS, RPi).
In secondo luogo, alcuni lettori, inclusi gli utenti di Anaconda, hanno riportato problemi nell’uso di funzioni GUI come cv2.imshow
e cv2.waitKey
.
In questi scenari, OpenCV darà un errore dicendo che non è stato compilato con il supporto GTK o QT.
In parole povere:
- Sarà possibile usare tutte le altre funzioni di OpenCV ma non sarà possibile usare nessuna delle funzioni GUI, in particolare, quelle nel modulo highgui.
- La soluzione qui è compilare dai sorgenti (Ubuntu, macOS, RPi).
Terzo, so che i lettori hanno riportato problemi quando eseguono import cv2
nei loro terminali, Jupyter Notebooks, o shell Python – questo non è un problema con l’installazione pip di OpenCV.
Nella maggior parte delle situazioni, ma non in tutte, l’errore non è legato all’effettiva installazione di OpenCV.
Invece, è più probabile che sia un problema di comprensione di una combinazione di:
- I comandi che sono stati eseguiti e come utilizzarli correttamente.
- Pensare che un comando sia stato eseguito correttamente ma invece ha dato luogo ad un errore.
- Non riuscire ad accedere al vostro ambiente virtuale Python (se ne state usando uno).
Vorrete ricontrollare i vostri comandi, ripetere i passi ed esaminare attentamente il vostro output prima di segnalare un problema importando i binding cv2
.
Infine, la versione di OpenCV che verrà installata tramite pip non include algoritmi “non liberi” come SIFT, SURF e altri algoritmi brevettati. Se non avete bisogno di usare algoritmi brevettati, allora siete a posto. Altrimenti, ti consiglio di compilare OpenCV dai sorgenti attraverso uno dei miei tutorial di installazione per il tuo sistema.
Sommario
Nel tutorial di oggi, hai imparato come installare OpenCV con pip sul tuo sistema operativo.
In particolare, abbiamo spiegato come installare OpenCV via pip su Ubuntu, macOS e Raspberry Pi.
Mentre l’installazione di OpenCV via pip può essere il metodo più semplice per iniziare, tieni presente che potresti incorrere in altri problemi.
Se vi imbattete in errori o problemi usando l’installazione di OpenCV via pip, assicuratevi di fare riferimento alla sezione “A cosa fare attenzione quando si usa pip per installare OpenCV” di questo post sul blog.
Spero che il tutorial di oggi vi sia piaciuto!
Per essere avvisati quando verranno pubblicati futuri post sul blog di PyImageSearch, assicuratevi di inserire il vostro indirizzo email nel modulo sottostante.