Installation de OpenCV sur une Raspberry Pi 4

Installation de OpenCV sur une Raspberry Pi 4

Configuration de la raspberry Pi 4 pour utiliser OpenCV
100% Complete

Objectifs

J'ai remarqué que l'installation d'OpenCV en passant par l'utilitaire PIP de Python ne fonctionnait pas très bien avec une Raspberry Pi. Voici comment compiler OpenCV pour notre Raspberry Pi 4.

Nous allons configurer une Raspberry Pi 4 pour pouvoir compiler OpenCV 4.1.1, puis nous lancerons la compilation.

Finalement nous testerons que la bibliothèque OpenCV est bien installée pour Python3

Vérification de la version de l'EEPROM

Il se peut que l'EEPROM ne soit pas à jour juste après une installation de Raspbian sur une Raspberry Pi 4. Pour le vérifier, dans un terminal de commande, taper :

sudo rpi-eeprom-update -a

Si une mise à jour est nécessaire, elle se fera automatiquement.

Ne pas oublier de rebooter la Raspberry après la mise à jour.

Expension du file system

sudo raspi-config

Et choisir :6 (Advanced options) >  A1 (Expand Filesystem)

Mise à jour du système

sudo apt-get update && sudo apt-get upgrade

Outils pour la compilation :

sudo apt-get install -y cmake gfortran libjpeg-dev libtiff-dev libgif-dev libavcodec-dev libavformat-dev libswscale-dev 

sudo apt-get install -y libgtk2.0-dev libcanberra-gtk*  libxvidcore-dev libx264-dev libgtk-3-dev libtbb2 libtbb-dev libdc1394-22-dev libv4l-dev libopenblas-dev libatlas-base-dev libblas-dev libjasper-dev liblapack-dev libhdf5-dev protobuf-compiler

OpenCV

Afin d'installer OpenCV, nous avons besoin de OpenCV et de opencv-contrib. Pour récupérer les version 4.5.0 de chacun à partir de leur dépôt officiel, taper les commandes :

cd ~

wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.0.zip

unzip opencv.zip

wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.0.zip

unzip opencv_contrib.zip

mv opencv-4.5.0 opencv

mv opencv_contrib-4.5.0 opencv_contrib

rm opencv.zip opencv_contrib.zip

Création d'un environnement Python3 virtuel

Vérification de la version de Python, la commande ...

python3 --version

... doit renvoyer quelque chose comme : Python 3.7.3

Nous pouvons ajouter le chemin de l'exécutable de python3.7 dans une variable d'environnement stockée dans le profil de l'utilisateur "pi" avec la commande :

echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.7" >> ~/.bashrc

Rechargement du profile :

source ~/.bashrc

Installation de l'environnement virtuel :

sudo pip3 install virtualenv virtualenvwrapper

Création de l'environnement virtuel :

echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bashrc

echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrcsource ~/.bashrc
mkvirtualenv cv450

Installation de Numpy (processeur numérique) dans l'environnement virtuel (bien faire attention de na pas faire l'installation en sudo):

pip3 install numpy

Pour sortir de l'environnement virtuel, il faut faire :

deactivate

Compilation d'OpenCV

Afin de faciliter la compilation, nous allons augmenter la taille du fichier de swap utilisé par le système. Pour cela :

sudo vi /etc/dphys-swapfile

# set size to absolute value, leaving empty (default) then uses computed value

#   you most likely don't want this, unless you have an special disk situation

# CONF_SWAPSIZE=100

CONF_SWAPSIZE=1024

Mise à jour du fichier de swap :

sudo /etc/init.d/dphys-swapfile stop

sudo /etc/init.d/dphys-swapfile start

Attention ! il faudra remettre le fichier de swap dans son état initial après la compilation d'OpenCV car un trop grand fichier de swap peut détruire rapidement les cartes SD.

Préparation de la compilation :

cd ~/opencv/

mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE \
        -D CMAKE_INSTALL_PREFIX=/usr/local \
        -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
        -D ENABLE_NEON=ON \        -D ENABLE_VFPV3=ON \
        -D WITH_OPENMP=ON \        -D BUILD_TIFF=ON \
        -D WITH_FFMPEG=ON \        -D WITH_TBB=ON \
        -D BUILD_TBB=ON \        -D BUILD_TESTS=OFF \
        -D WITH_EIGEN=OFF \
        -D WITH_V4L=ON \        -D WITH_LIBV4L=ON \
        -D WITH_VTK=OFF \        -D WITH_QT=OFF \
        -D OPENCV_ENABLE_NONFREE=ON \
        -D INSTALL_C_EXAMPLES=OFF \
        -D INSTALL_PYTHON_EXAMPLES=OFF \
        -D BUILD_NEW_PYTHON_SUPPORT=ON \
        -D BUILD_opencv_python3=TRUE \
        -D OPENCV_GENERATE_PKGCONFIG=ON \
        -D BUILD_EXAMPLES=OFF ..

Compilation (C'est TRES long, il faut compter environ 1h40 sur une Raspberry Pi 4 (1500 MHz - 2 MB) ):

make -j4

Installation d'OpenCV :

sudo make install

sudo ldconfig

sudo apt-get update

On remet le fichier de swap comme avant la compilation :

sudo vi /etc/dphys-swapfile

# set size to absolute value, leaving empty (default) then uses computed value

#   you most likely don't want this, unless you have an special disk situation

CONF_SWAPSIZE=100

Mise à jour du fichier de swap :

sudo /etc/init.d/dphys-swapfile stop

sudo /etc/init.d/dphys-swapfile start

Vérification de l'installation de OpenCV avec la commande :

ls -l /usr/local/lib/python3.7/dist-packages/

... doit afficher un message du style :

-rw-r--r-- 1 root staff 1895772 Mar 20 20:00 cv2.so

Comme nous allons utiliser OpenCV dans un environnements virtuel Python (nommé cv450) , il nous faut construire un lien symbolique de la librairie OpenCV dans notre environnement :

cd ~/.virtualenvs/cv450/lib/python3.7/site-packages

ln -s /usr/local/lib/python3.7/dist-packages/cv2/python-3.7/cv2.cpython-37m-arm-linux-gnueabihf.so

Vérification de l'installation pour Python3

On se met dans l'environnement virtuel prévu précédemment :

cd ~

mkvirtualenv cv450

Lancement de Python3 :

(cv450) pi@RPI-Camera:~ $ python3

Python 3.7.3 (default, Jul 25 2020, 13:03:44)[GCC 8.3.0] on linuxType "help", "copyright", "credits" or "license" for more information.

>>> import cv2

>>> cv2.__version__

'4.5.0'

>>> exit()

On a bien la version 4.5.0 installée pour python3 dans notre environnement virtuel cv2 !

Nettoyage

Tout les fichiers ayant servi à la compilation ne sont plus nécessaire pour l'utilisation de OpenCV, on peut maintenant les supprimer.

Pour cela faire :

cd ~

sudo rm -rf ~/opencv

sudo rm -rf ~/opencv_contrib

Powered by eZ Publish™ CMS Open Source Web Content Management. Copyright © 1999-2014 eZ Systems AS (except where otherwise noted). All rights reserved.