Nous allons dans cet article voir les différentes étapes pour installer OpenCV 4 sur Raspberry Pi 3 (B+). Les manipulations sont cependant identique pour d’autre version de Raspberry Pi, mais le temps d’installation et de calculs seront plus long.

Edit du 20 novembre: OpenCV 4.0.0 est disponible, l’article est à jour

Prérequis:

Vous devrez également avoir, au choix:

  • Un accès physique au Raspberry afin de pouvoir ouvrir un terminal et tapez les commandes
  • Un accès à distance ssh

Si toutes ces conditions sont réunies, nous pouvons commencer !

Étape 1: Étendre la partition

Si votre installation de Raspbian est toute neuve, vous aurez besoin d’étendre la partition afin d’utiliser tout l’espace libre. Pour cela:

sudo raspi-config
raspi-config
Raspi-config: Expand Filesystem

Dans le menu, allez sur l’option “Expand Filesystem” et appuyez sur entrer et validez.

Enfin redémarrez votre Raspberry:

sudo reboot

Étape 2: Installation des dépendances

La première étape est l’installation des dépendances nécessaires pour le fonctionnement d’OpenCV. Nous profitons de cette étape pour vérifier que nous sommes bien à jour dans les paquets déjà installé:

sudo apt-get update
sudo apt-get upgrade

Ensuite, nous allons installer des outils nécessaires pour la compilation d’OpenCV:

sudo apt-get install build-essential cmake git pkg-config

Afin de pouvoir charger différents formats d’image dans OpenCV (JPEG, PNG, TIFF, …),, ainsi que différents formats vidéo, nous installons les paquets suivants:

sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libjasper-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev

Nous passons ensuite à l’installation des paquets GTK nécessaire pout l’utilisation des fonctions graphiques ( Affichage des images, sélection de ROI):

sudo apt-get install libgtk-3-dev libcanberra-gtk-module

Et ensuite nous installons quelques dernières librairies utilisées pour l’optimisation de calculs:

sudo apt-get install libatlas-base-dev gfortran

Suivi de peu par le gestionnaire de paquet pip:

sudo apt-get install python3-pip

Et enfin Numpy, pour la manipulation de matrice:

pip3 install numpy

Nous avons donc installé toutes nos dépendances, nous pouvons maintenant passer à OpenCV

Étape 3: Téléchargement d’OpenCV 4

Maintenant que tout est prêt pour l’installation, nous pouvons télécharger opencv ainsi qu’opencv_contrib.

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

Une fois ces archives téléchargées, nous pouvons les dézipper et renommer les dossier par la même occasion:

unzip opencv.zip
mv opencv-4.0.0 opencv
unzip opencv_contrib.zip
mv opencv_contrib-4.0.0 opencv_contrib

Maintenant que tout est réuni, nous pouvons passer à l’installation !

Étape 4: Installation d’OpenCV 4

Nous commençons par créer le dossier build dans OpenCV qui nous permettera de compiler OpenCV.

cd ~/opencv 
mkdir build 
cd build

Nous pouvons dès maintenant préparer notre build en utilisant Cmake:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=OFF \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D BUILD_EXAMPLES=ON ..

Pensez bien à vérifier la sortie de la commande Cmake: vous devriez avoir python 3.5 de sélectionné.

Augmenter l’espace d’échange (swap space):

Avant de passer à la compilation, je vous conseille d’augmenter la taille de l’espace d’échange. Cela vous permettra de compiler OpenCV sans que la compilation ne s’arrête à cause de problèmes de mémoire. Pour ce faire, nous ouvrons le fichier dphys-swapfile.

sudo nano /etc/dphys-swapfile

Puis nous modifions la variable CONF_SWAPSIZE

#CONF_SWAPSIZE=100
CONF_SWAPSIZE=1024

Enfin, nous devons arrêter et redémarrer le service s’occupant de l’espace d’échange.

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

Enfin nous sommes près à compiler OpenCV ! Le Raspberry Pi 3 ayant 4 cœurs, nous allons les exploiter lors de la compilation avec la commande suivante:

make -j4

Note: Si la compilation renvoie une erreur, essayer de compiler avec un seul cœur:

make clean
make

Puis nous installons OpenCV:

sudo make install
sudo ldconfig

Vous pouvez maintenant remettre votre fichier dphys-swapfile comme à l’origine: remettez la variable CONF_SWAPSIZE à 100 et redémarrer le service

Étape 5: Lier OpenCV 4 à Python 3

Il ne nous reste plus qu’à créer un lien symbolique entre le dossier d’installation d’OpenCV et les librairies de python 3 .

sudo ln -s /usr/local/python/cv2/python-3.5/cv2.cpython-35m-arm-linux-gnueabihf.so  /usr/lib/python3.5/cv2.so

Étape 6: Test de l’installation d’OpenCV 4.0.0 et de Python 3.5

Félicitation, vous venez d’installer OpenCV 4 sur Raspberry!

Vérifions juste que nous avons bien tout installé:

python3
>>> import cv2
>>> cv2.__version__
'4.0.0-beta'

Une fois que vous avez vérifié qu’OpenCV était bien installé, vous pouvez supprimez les répertoires opencv et opencv_contrib pour récupérer de la place:

rm -rf opencv opencv_contrib

Si vous avez rencontré des problèmes lors de l’installation d’OpenCV 4 sur Raspberry, n’hésitez pas a demander de l’aide dans les commentaires ci-dessous.

Et ensuite ?

OpenCV 4 est installé sur votre Raspberry Pi et c’est déjà un bon début !

Si vous êtes nouvel utilisateur d’OpenCV, je vous invite maintenant à découvrir les fonctions de bases pour la manipulation de base des images (ici) et des vidéos (ici).

Vous voulez avoir des idées de projets à réaliser avec votre Raspberry Pi ? En voici quelques une:


21 commentaires

Dalil Maadour · 14 janvier 2019 à 7 h 06 min

Bonjour, alors j’ai un problème assez « conséquent »
J’ai besoin d’Opencv et j’ai un Raspberry B pour mes projets avec Raspbian. Or quand je suis le tuto, à la fin quand je fais : »import cv2″ cela me dit que ça n’existe pas. Aidez moi s’il vous plaît hahaha

    Cicciu · 18 janvier 2019 à 13 h 15 min

    Va poser la question à ton professeur m.Roux 😀😀😀

      Florent · 12 février 2019 à 14 h 04 min

      Bonjour,
      Dans le cas où Mr Roux n’a pu vous aider, vous pouvez consulter l’étape 5 de ce tutoriel qui devrait résoudre votre problème.

Clemuchon · 8 février 2019 à 20 h 48 min

Merci pour ce tutoriel 🙂 . J’ai suivi une 10aine de tuto plus ou moins différents sur l’installation d’opencv 4.0 sur Rpi 3 b+ et à chaque fois ça ne marche pas . Quand ça ne vient pas d’un freeze vers 88% ou même à 100% .. c’est après l’install du cmake que cv2  » n ‘existe pas  » :
>>> import cv2
Traceback (most recent call last):
File «  », line 1, in
ImportError: No module named ‘cv2’

ça fait 3j que j’installe , réinstalle , recommence rerecommence .. make -j4 make -j2 make -j1 ( qui prend au moins 6h ! )

siouplé HEEEEEELLLLLLP 😀 !

    Florent · 12 février 2019 à 14 h 03 min

    Bonjour,
    Je viens de mettre à jour l’article.
    Vous pouvez consulter l’étape 5 qui devrait résoudre votre problème.

      elyes labidi · 9 juillet 2019 à 5 h 26 min

      Ça ne marche toujours pas la bibliothèque semble bien installé mais à la vérification il nya pas de module cv2 est ce qu’il y a bien une autre solution s’il vous plaît ?

        Florent · 10 juillet 2019 à 10 h 09 min

        Bonjour,
        Vérifiez que le fichier /usr/local/python/cv2/python-3.5/cv2.cpython-35m-arm-linux-gnueabihf.so est présent.
        Si OpenCV à été installer avec python 3.7, il est nécessaire de prendre en compte cela lors de l’étape 5. Ce fichier devrait être dans un dossier différent (/usr/local/python/cv2/python-3.7/cv2.cpython…)

          elyes labidi · 21 juillet 2019 à 12 h 54 min

          Merci beaucoup Florent ça marche très bien !!

          Courla · 23 juillet 2019 à 13 h 23 min

          Bonjour j’ai le même problème, j’ai bien utilisé python3.7 malheureusement cela ne résout pas mon problème.
          Lorsque je fais un import cv2 j’obtiens la même erreur. En cherchant si les fichiers sont bien créer je constate que le 1er est existe bien
          /usr/local/python/cv2/python-3.5/cv2.cpython-35m-arm-linux-gnueabihf.so

          mais pour le 2ème
          /usr/lib/python3.5/cv2.so ==> l’icone du dossier est un panneau attention (lorsque je l’ouvre l’éditeur de texte il est vide)

          Quest-ce que cela signifie? Est-ce que c’est bien de la que viens l’erreur sinon d’ou peut-elle venir? Que dois-je faire pour résoudre se problème

Lucas · 16 avril 2019 à 21 h 40 min

Bonjour,

J’ai un problème lors de la compilation (vers 89%) on me dit que beaucoup de fichiers commençant en CMakeFiles/example_tutorial et finissant en .o sont des fichiers non reconnus car tronqués…

    Florent · 17 avril 2019 à 21 h 42 min

    Bonjour Lucas,

    Il est fréquent que la compilation bloque sur raspberry
    Avez-vous bien augmenter le swap space ?

chauvet cedric · 16 juin 2019 à 16 h 34 min

Bonjour,
J’ai fait ma mise a jour en suivant votre article, tout va bien avec la picam qui va bien plus vite que la version précédente, merci!

Par contre je ne peux plus lire de fichier .avi en videocapture: Probleme d’ioctl qui affiche  » VIDIOC_REQBUFS »

Le build indique Video I/O :
DC1394: NO
FFMPEG : NO
GSTREAMER : NO
V4l/V4l2 : YES

Que dois je faire?
Merci

Alors qu’avant ca marchait très bien 🙁 J’ai essayé de faire des recherches mais ca depasse mes compétences.

    Florent · 19 juin 2019 à 9 h 03 min

    Bonjour,
    L’erreur semble venir du fait que lors du build, ni FFmpeg, ni GStreamer n’a été pris en compte.

    Le plus simple serait de partir sur une vérification / installation de GStreamer :
    sudo apt-get -y install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
    Puis de refaire un build d’OpenCV avec ,en plus, l’option : -D WITH_GSTREAMER=ON

    J’espère que cela résoudra vos problèmes.

Igor · 3 août 2019 à 15 h 15 min

Merci Pour le tutoriel .J’ai réussi à installer mais j’ai un programme de reconnaissance faciale et quand j’exécute on m’affiche cela:
VIDEOIO ERROR: V4L: can’t open camera by index 0
Traceback (most recent call last):
File « face_datasets.py », line 23, in
gray = cv2.cvtColor(image_frame, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.0.0) /home/pi/opencv/modules/imgproc/src/color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function ‘cvtColor’

Pouvez-vous m’aider résoudre cela?
Merci

    Florent · 6 août 2019 à 10 h 36 min

    Bonjour Igor,

    Vous pouvez vérifier que la caméra est bien activée pour le Raspberry. Pour ce faire, entrer la commande « sudo raspi-config », puis dans les options d’interface, activez la caméra. Une fois le Raspberry redémarré, vous pouvez tester son bon fonctionnement en tapant la commande « raspistill -v -o test.jpg » qui affichera la caméra pendant 5 secondes et enregistra une image de celle-ci.

    Si cela ne résout pas votre problème, vous pouvez taper la commande « ls /dev/video* » qui vous affichera les différentes caméras qui sont branchées sur le Raspberry. Cela vous permettra que l’index donné à la fonction cv2.VideoCapture(0) est bien le bon.

Hansemann · 7 août 2019 à 19 h 21 min

Salut super Tuto très clair.
Par contre je rencontre un problème, compilation aucun soucis, installation aussi, mais que je lance python et import cv2 cela me redonne:

Traceback (most recent call last):
File «  », line 1, in
ModuleNotFoundError: No module named ‘cv2’

cela pet il venir du fait que j’ai python 3.7 et pas 3.5?
Cordialement

Victor

    Hansemann · 8 août 2019 à 11 h 03 min

    J’ai trouvé mon erreur et ca devrait aider Courla.

    à l’étape 5 si vous avez utilisé python3.7 ou autre que 3.5 il faut bien modifier le lien : « sudo ln -s /usr/local/python/cv2/python-3.5/cv2.cpython-35m-arm-linux-gnueabihf.so /usr/lib/python3.5/cv2.so » par « sudo ln -s /usr/local/python/cv2/python-3.7/cv2.cpython-37m-arm-linux-gnueabihf.so /usr/lib/python3.7/cv2.so »

    si dans l’explorateur fichier vous avez bien cv2.so mais qu’il y a un point d’exclamation c’est que le lien c’est mal fait (mauvaise adresse) il faut supprimer le fichier cv2 et relancer l’étape 5

      Florent · 8 août 2019 à 11 h 37 min

      Super Victor ! Merci de ton retour 🙂

maxime · 10 octobre 2019 à 17 h 32 min

Bonjour tous le monde,

Je tiens à dire que c’est un excellent tuto et cerise sur le gâteau en Francais 😀
j’ai un souci pendant la compilation, tout ce passe bien jusqu’à 100%.. et la une erreur.
quelqu’un pourrait il m’aiguiller sur l’origine de ce message d’erreur?

virtual memory exhausted: Ne peut allouer de la mémoire
modules/python3/CMakeFiles/opencv_python3.dir/build.make:62 : la recette pour la cible « modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o » a échouée
make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] Erreur 1
CMakeFiles/Makefile2:24834 : la recette pour la cible « modules/python3/CMakeFiles/opencv_python3.dir/all » a échouée
make[1]: *** [modules/python3/CMakeFiles/opencv_python3.dir/all] Erreur 2
make[1]: *** Attente des tâches non terminées….
[100%] Linking CXX shared module ../../lib/cv2.so
[100%] Built target opencv_python2
Makefile:160 : la recette pour la cible « all » a échouée
make: *** [all] Erreur 2

    maxime · 14 octobre 2019 à 18 h 02 min

    j’ai trouvé l’erreur, il m’a suffit d’augmenter la valeur de la variable CONF_SWAPSIZE
    voila si ça peut aider quelqu’un

PetitKiwi · 6 novembre 2019 à 10 h 59 min

bonjour,

Sur mon Python j’ai 3 versions de Python : 2.7, 3.4 et 3.6 (que j’ai compilée en suivant un tuto). Au moment de la compilation de openCV (étape 4), cmake utilise visiblement la version 3.4.
Je voudrais donc que cmake utilise la version 3.6 de Python et non la version 3.4. Comment faire ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.