Bonjour à tous.
Quand j'ai voulu installer OpenCV sur ma framboise pour un projet, j'ai été très déçu du résultat. Il s'est avéré que pour les nouvelles versions d'images Raspbian avec prise en charge de Python3.7, il est impossible d'installer la bibliothèque à partir du référentiel avec la commande pip install familière.
Raisonspip install opencv-python m'a donné un résultat inattendu: "Impossible de trouver une version qui satisfait à l'exigence ...". Récemment, j'ai installé cette bibliothèque sur mon ordinateur principal et le résultat a été positif.
Lorsque je me suis revérifié pour la courbure et que je me suis assuré que j'étais toujours en mesure de taper correctement une commande de 25 caractères sans fautes de frappe, il était temps de découvrir ce qui pouvait affecter le résultat.
La page officielle opencv-python sur pypi.org a beaucoup clarifié:
... Notez que le format de roue (en particulier manylinux) ne prend actuellement pas correctement en charge l'architecture ARM, il n'y a donc pas de packages pour les plates-formes ARM dans PyPI. Cependant, les packages opencv-python pour Raspberry Pi peuvent être trouvés sur www.piwheels.org .
... Veuillez noter que le format de roue (en particulier manylinux) ne prend actuellement pas correctement en charge l'architecture ARM, donc PyPI n'a pas de packages pour les plates-formes ARM. Cependant, les packages opencv-python pour le Raspberry Pi peuvent être trouvés sur www.piwheels.org .
Ok ...
J'ai vérifié que la framboise tirait des paquets de la bonne source, mais le dernier bloc du site a tout mis à sa place:
Les roues fournies prennent en charge tous les modèles Raspberry Pi (Pi 3, Pi 2, Pi 1 et Pi Zero). Des roues sont fournies pour Raspbian Jessie (Python 3.4) et Raspbian Stretch (Python 3.5). Nous prévoyons d'ajouter la prise en charge de Raspbian Buster (Python 3.7) en temps voulu.
Les roues fournies prennent en charge tous les modèles Raspberry Pi (Pi 3, Pi 2, Pi 1 et Pi Zero. Les roues prennent en charge Raspbian Jessie (Python 3.4) et Raspbian Stretch (Python 3.5). Nous prévoyons d'ajouter la prise en charge de Raspbian Buster (Python 3.7) en temps voulu.
J'étais déjà prêt pour une nuit blanche avec la compilation OpenCV sur la framboise, mais je me souvenais de l'
article sur la compilation croisée de la bibliothèque (ce n'est pas pour rien que les professeurs de l'institut ont suggéré que nous fassions un laboratoire au lieu de manuels). Après avoir légèrement modifié les paramètres de l'article (il fallait ajouter import pour python3 et vérifier si toutes les bibliothèques sont pour OpenCV 4.1.0), j'ai pu obtenir le résultat que je souhaitais.
Cependant, la paresse a repris et j'ai commencé à chercher des solutions toutes faites à un tel problème. Je suis donc tombé sur cet article. À sa suite, j'ai tout rassemblé la première fois sans danser avec des tambourins et autres rituels chamaniques. Je pense que cet article sera utile aux autres.
Je vous présente ma traduction gratuite de l'article «
Compilation croisée d'OpenCV 4 pour Raspberry Pi et BeagleBone Black » de Paul Silisteanu. Peut-être que quelqu'un économisera des minutes ou des heures qui peuvent être consacrées à une leçon plus intéressante que de jouer une histoire de détective.
J'ai moi-même ajouté quelques notes à la traduction, que j'ai jugées importantes: [
elles sont surlignées dans le texte ].
Bonne lecture!
Compilation croisée d'OpenCV 4 pour Raspberry Pi et BeagleBone Black
Dans cet article, je vais vous montrer comment installer la dernière version d'
OpenCV pour Raspberry Pi et BeagleBone Black en utilisant la compilation croisée. Au moment d'écrire ces lignes [
sa mise à jour au moment de la traduction est le 17 juillet 2019 ], la dernière version d'OpenCV est 4.1.0, et la version livrée avec les systèmes d'exploitation standard était 3.2.0. Bien sûr, il est possible de compiler OpenCV depuis la source directement vers Raspberry ou BeagleBone Black, mais cela peut prendre plusieurs heures. Et la compilation croisée d'OpenCV pour armhf est un processus d'une durée de 20 à 30 minutes. Et, selon la vitesse de votre ordinateur, il peut être encore plus rapide.
Je recommande de construire dans une machine virtuelle
Debian Buster ou dans un conteneur
Docker , afin de ne pas encombrer votre système d'exploitation principal. Si vous décidez d'installer Buster sur une machine virtuelle, assurez-vous d'utiliser la version
minimale [
je recommande de faire exactement cela - je l'ai vérifié sur mon propre skin ]. Il est très important de commencer avec un système simple, car nous devons installer les exécutables et les bibliothèques armhf. En utilisant un système minimal, nous évitons les conflits potentiels avec les versions natives x86-64.
L'article décrit le travail uniquement sur Raspberry PI avec le système Raspbian, mais si vous utilisez BeagleBone Black, tout devrait fonctionner exactement de la même manière.
Je suppose que vous avez déjà installé un
Raspbian propre. J'ai utilisé l'image de la dernière version de bureau disponible. En fait, vous pouvez suivre l'article sur Raspbian Lite, mais j'ai fait tous mes tests en utilisant la version GUI.
Tout d'abord, assurons-nous que notre machine virtuelle ou conteneur est mis à jour:
sudo apt update sudo apt upgrade
Ensuite, vous devez connecter l'architecture armhf.
sudo dpkg --add-architecture armhf sudo apt update sudo apt install qemu-user-static
À ce stade, vous pouvez installer des bibliothèques et des applications pour armhf sur votre système et les exécuter.
Nous allons construire OpenCV avec le support de Python et C ++.
Installons Python2 et Python3 , ainsi que le pacte
NumPy pour eux:
sudo apt-get install python3-dev sudo apt-get install python3-numpy sudo apt-get install python-dev sudo apt-get install python-numpy
Nous aurons également besoin de libpython pour l'architecture armhf:
sudo apt-get install libpython2-dev:armhf sudo apt-get install libpython3-dev:armhf
Ensuite, nous installerons libgtk-3 pour pouvoir écrire des programmes simples avec une interface graphique. Si vous prévoyez d'utiliser OpenCV exclusivement en mode hors ligne, vous pouvez ignorer en toute sécurité les deux bibliothèques suivantes:
$ sudo apt install libgtk-3-dev:armhf libcanberra-gtk3-dev:armhf
Nous devons également installer plusieurs autres bibliothèques nécessaires à OpenCV (prise en charge de divers formats d'image et de vidéo):
sudo apt install libtiff-dev:armhf zlib1g-dev:armhf sudo apt install libjpeg-dev:armhf libpng-dev:armhf sudo apt install libavcodec-dev:armhf libavformat-dev:armhf libswscale-dev:armhf libv4l-dev:armhf sudo apt-get install libxvidcore-dev:armhf libx264-dev:armhf
Ensuite, nous allons installer des compilateurs croisés pour Debian, qui peuvent être utilisés pour créer des binaires armhf pour le Raspberry Pi:
sudo apt install crossbuild-essential-armhf sudo apt install gfortran-arm-linux-gnueabihf
Au moment d'écrire ces lignes, la boîte à outils ci-dessus est basée sur GCC version 8.3, qui est la même que dans Raspbian.
Enfin, nous installerons
Cmake ,
git ,
pkg-config et wget:
sudo apt install cmake git pkg-config wget
Ensuite, nous pouvons télécharger la version actuelle d'OpenCV. Je vais vous montrer comment installer la version complète d'OpenCV (bibliothèques par défaut et contrib):
cd ~ mkdir opencv_all && cd opencv_all wget -O opencv.tar.gz https://github.com/opencv/opencv/archive/4.1.0.tar.gz tar xf opencv.tar.gz wget -O opencv_contrib.tar.gz https://github.com/opencv/opencv_contrib/archive/4.1.0.tar.gz tar xf opencv_contrib.tar.gz rm *.tar.gz
Nous devons changer temporairement deux variables système nécessaires pour réussir à construire le support GTK +:
export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig:/usr/share/pkgconfig export PKG_CONFIG_LIBDIR=/usr/lib/arm-linux-gnueabihf/pkgconfig:/usr/share/pkgconfig
Pour le moment, nous pouvons utiliser Cmake pour générer des scripts de construction OpenCV:
cd opencv-4.1.0 mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/opt/opencv-4.1.0 \ -D CMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_all/opencv_contrib-4.1.0/modules \ -D OPENCV_ENABLE_NONFREE=ON \ -D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \ -D BUILD_TESTS=OFF \ -D BUILD_DOCS=OFF \ -D PYTHON2_INCLUDE_PATH=/usr/include/python2.7 \ -D PYTHON2_LIBRARIES=/usr/lib/arm-linux-gnueabihf/libpython2.7.so \ -D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2/dist-packages/numpy/core/include \ -D PYTHON3_INCLUDE_PATH=/usr/include/python3.7m \ -D PYTHON3_LIBRARIES=/usr/lib/arm-linux-gnueabihf/libpython3.7m.so \ -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \ -D BUILD_OPENCV_PYTHON2=ON \ -D BUILD_OPENCV_PYTHON3=ON \ -D BUILD_EXAMPLES=OFF ..
Description des paramètresCMAKE_INSTALL_PREFIX - Répertoire où seront situées les données collectées
CMAKE_TOOLCHAIN_FILE - Paramètre indiquant à Cmake ce que sera la compilation croisée
OPENCV_EXTRA_MODULES_PATH - Chemin vers des modules OpenCV supplémentaires
OPENCV_ENABLE_NONFREE = ON - Inclut des algorithmes brevetés dans l'assemblage
Veuillez noter que des restrictions de brevets s'appliquent à l'utilisation des algorithmes SIFT et SURF. Et si vous prévoyez d'assembler pour un usage commercial, pensez si vous en avez besoin et vérifiez les limites.
ENABLE_NEON = ON - Activer les instructions NEON pour l'optimisation pour ARM
ENABLE_VFPV3 = ON - Activer les instructions VFPv3-D32 pour l'optimisation pour ARM
BUILD_TESTS = OFF - Désactiver les règles pour les tests de construction (ce sera plus rapide)
BUILD_DOCS = OFF - Désactiver les règles de documentation de construction
PYTHON2_INCLUDE_PATH - Chemin vers python2.7
PYTHON2_LIBRARIES - Chemin vers la bibliothèque libpython2 précédemment téléchargée
PYTHON2_NUMPY_INCLUDE_DIRS - Chemin vers NumPy pour python2.7
PYTHON3_INCLUDE_PATH - Chemin vers python3
PYTHON3_LIBRARIES - Chemin vers la bibliothèque libpython3 précédemment téléchargée
PYTHON3_NUMPY_INCLUDE_DIRS - Chemin vers NumPy pour python3
BUILD_OPENCV_PYTHON2 = ON - Inclure des règles pour python2 dans l'assembly
BUILD_OPENCV_PYTHON3 = ON - Inclure des règles pour python4 dans l'assembly
BUILD_EXAMPLES = OFF - Désactive les règles d'assemblage de tous les exemples
Si vous n'avez pas eu d'erreurs, vous recevrez par conséquent un Makefile dans le dossier d'assembly. Maintenant, nous pouvons commencer la construction réelle:
make -j16
[
L'article indique 16 processus parallèles lors de l'assemblage, mais ce paramètre devra être sélectionné pour votre système d'exploitation hôte ]
Une fois la phase de construction terminée, nous pouvons installer la bibliothèque:
sudo make install/strip
Ensuite, nous devons changer le nom de la bibliothèque, que le programme d'installation a appelé à tort la bibliothèque x86_64, bien qu'il s'agisse en fait d'armhf:
cd /opt/opencv-4.1.0/lib/python3.7/dist-packages/cv2/python-3.7/ sudo cp cv2.cpython-37m-x86_64-linux-gnu.so cv2.so
Compressons le dossier d'installation et enregistrons l'archive dans le répertoire personnel:
cd /opt tar -cjvf ~/opencv-4.1.0-armhf.tar.bz2 opencv-4.1.0 cd ~
Pour nous faciliter la vie, j'ai également préparé un simple fichier de paramètres pkg-config appelé opencv.pc. Vous pouvez le télécharger de cette façon:
git clone https://gist.github.com/sol-prog/ed383474872958081985de733eaf352d opencv_cpp_compile_settings cd opencv_cpp_compile_settings cp opencv.pc ~ cd ~
[
En fait, il n'est pas nécessaire de le faire sur la machine hôte. Vous pouvez télécharger le fichier directement sur Raspberry. Mais l'auteur a souhaité le faire dans cet ordre ]
opencv.pcÉtant donné que le fichier est relativement petit, permettez-moi de l'insérer dans le texte de l'article: libdir = /opt/opencv-4.1.0/lib includedir = /opt/opencv-4.1.0/include/opencv4 Name: OpenCV Description: OpenCV (Open Source Computer Vision Library) is an open source computer vision and machine learning software library. Version: 4.1.0 Libs: -L${libdir} -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_calib3d -lopencv_ccalib -lopencv_core -lopencv_datasets -lopencv_dnn_objdetect -lopencv_dnn -lopencv_dpm -lopencv_face -lopencv_features2d -lopencv_flann -lopencv_freetype -lopencv_fuzzy -lopencv_gapi -lopencv_hfs -lopencv_highgui -lopencv_imgcodecs -lopencv_img_hash -lopencv_imgproc -lopencv_line_descriptor -lopencv_ml -lopencv_objdetect -lopencv_optflow -lopencv_phase_unwrapping -lopencv_photo -lopencv_plot -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_stitching -lopencv_structured_light -lopencv_superres -lopencv_surface_matching -lopencv_text -lopencv_tracking -lopencv_videoio -lopencv_video -lopencv_videostab -lopencv_xfeatures2d -lopencv_ximgproc -lopencv_xobjdetect -lopencv_xphoto Cflags: -I${includedir}
-lopencv_bgsegm -lopencv_bioinspired -lopencv_calib3d -lopencv_ccalib -lopencv_core -lopencv_datasets -lopencv_dnn_objdetect -lopencv_dnn -lopencv_dpm -lopencv_face -lopencv_features2d -lopencv_flann -lopencv_freetype -lopencv_fuzzy -lopencv_gapi -lopencv_hfs -lopencv_highgui -lopencv_imgcodecs -lopencv_img_hash -lopencv_imgproc libdir = /opt/opencv-4.1.0/lib includedir = /opt/opencv-4.1.0/include/opencv4 Name: OpenCV Description: OpenCV (Open Source Computer Vision Library) is an open source computer vision and machine learning software library. Version: 4.1.0 Libs: -L${libdir} -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_calib3d -lopencv_ccalib -lopencv_core -lopencv_datasets -lopencv_dnn_objdetect -lopencv_dnn -lopencv_dpm -lopencv_face -lopencv_features2d -lopencv_flann -lopencv_freetype -lopencv_fuzzy -lopencv_gapi -lopencv_hfs -lopencv_highgui -lopencv_imgcodecs -lopencv_img_hash -lopencv_imgproc -lopencv_line_descriptor -lopencv_ml -lopencv_objdetect -lopencv_optflow -lopencv_phase_unwrapping -lopencv_photo -lopencv_plot -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_stitching -lopencv_structured_light -lopencv_superres -lopencv_surface_matching -lopencv_text -lopencv_tracking -lopencv_videoio -lopencv_video -lopencv_videostab -lopencv_xfeatures2d -lopencv_ximgproc -lopencv_xobjdetect -lopencv_xphoto Cflags: -I${includedir}
-lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_stitching -lopencv_structured_light -lopencv_superres -lopencv_surface_matching -lopencv_text -lopencv_tracking -lopencv_videoio -lopencv_video -lopencv_videostab -lopencv_xfeatures2d -lopencv_ximgproc -lopencv_xobjdetect libdir = /opt/opencv-4.1.0/lib includedir = /opt/opencv-4.1.0/include/opencv4 Name: OpenCV Description: OpenCV (Open Source Computer Vision Library) is an open source computer vision and machine learning software library. Version: 4.1.0 Libs: -L${libdir} -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_calib3d -lopencv_ccalib -lopencv_core -lopencv_datasets -lopencv_dnn_objdetect -lopencv_dnn -lopencv_dpm -lopencv_face -lopencv_features2d -lopencv_flann -lopencv_freetype -lopencv_fuzzy -lopencv_gapi -lopencv_hfs -lopencv_highgui -lopencv_imgcodecs -lopencv_img_hash -lopencv_imgproc -lopencv_line_descriptor -lopencv_ml -lopencv_objdetect -lopencv_optflow -lopencv_phase_unwrapping -lopencv_photo -lopencv_plot -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_stitching -lopencv_structured_light -lopencv_superres -lopencv_surface_matching -lopencv_text -lopencv_tracking -lopencv_videoio -lopencv_video -lopencv_videostab -lopencv_xfeatures2d -lopencv_ximgproc -lopencv_xobjdetect -lopencv_xphoto Cflags: -I${includedir}
Copiez opencv-4.1.0-armhf.tar.bz2 et opencv.pc de votre dossier personnel dans RPi.
Dans la prochaine partie de l'article, je suppose que vous
faites déjà tout
sur votre Raspberry Pi .
Assurez-vous que votre RPi possède toutes les bibliothèques de développement que nous avons utilisées. Comme précédemment, si vous ne prévoyez pas d'utiliser GTK +, ignorez la première ligne des commandes suivantes. La plupart de ces bibliothèques devraient déjà être installées si vous utilisez la version complète de Raspbian:
sudo apt install libgtk-3-dev libcanberra-gtk3-dev sudo apt install libtiff-dev zlib1g-dev sudo apt install libjpeg-dev libpng-dev sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt-get install libxvidcore-dev libx264-dev
Décompressez et déplacez la bibliothèque dans le dossier / opt de votre RPi:
tar xfv opencv-4.1.0-armhf.tar.bz2 sudo mv opencv-4.1.0 /opt
Si vous le souhaitez, vous pouvez supprimer l'archive:
rm opencv-4.1.0-armhf.tar.bz2
Ensuite, déplaçons également opencv.pc dans un dossier où pkg-config peut le trouver:
sudo mv opencv.pc /usr/lib/arm-linux-gnueabihf/pkgconfig
Pour que le système d'exploitation puisse trouver les bibliothèques OpenCV, nous devons les ajouter au chemin de la bibliothèque:
echo 'export LD_LIBRARY_PATH=/opt/opencv-4.1.0/lib:$LD_LIBRARY_PATH' >> .bashrc source .bashrc
Déconnectez-vous et connectez-vous ou redémarrez le terminal.
Ensuite, créez des liens symboliques qui permettront à Python de charger les bibliothèques nouvellement créées:
sudo ln -s /opt/opencv-4.1.0/lib/python2.7/dist-packages/cv2 /usr/lib/python2.7/dist-packages/cv2 sudo ln -s /opt/opencv-4.1.0/lib/python3.7/dist-packages/cv2 /usr/lib/python3/dist-packages/cv2
À ce stade, vous pouvez utiliser la bibliothèque OpenCV de C ++ ou Python.
Dans le
référentiel de cet article, vous pouvez trouver plusieurs programmes de test en C ++ et Python. Vous pouvez télécharger le code sur votre Pi à l'aide des commandes:
git clone https://github.com/sol-prog/raspberry-pi-opencv.git cd raspberry-pi-opencv/tests
Il existe deux tests autonomes que vous pouvez utiliser même si vous n'avez pas d'affichage connecté à votre RPi: cli_cpp_test.cpp et cli_python_test.py. J'ai également inclus deux tests graphiques qui nécessitent un affichage: gui_cpp_test.cpp et gui_python_test.py.
Vous pouvez créer et exécuter des tests C ++ comme suit:
g++ cli_cpp_test.cpp -o cli_cpp_test `pkg-config --cflags --libs opencv` ./cli_cpp_test
Et, si vous avez un écran connecté à votre RPi:
g++ gui_cpp_test.cpp -o gui_cpp_test `pkg-config --cflags --libs opencv` ./gui_cpp_test
Voici une capture d'écran du test GUI C ++ exécuté sur mon Pi:

Pour les tests Python, utilisez:
python3 cli_python_test.py
ou
python3 gui_python_test.py
Il est également possible de compiler de manière croisée des programmes C ++ en utilisant OpenCV sur votre système Debian x86-64 et d'exécuter du code binaire sur votre RPi.
[
Plus loin dans l'article, l'auteur recommande de lire le livre de Derek Molloy sur la programmation pour RaspberryPi. Vous pouvez trouver le lien de référence vers le livre dans l'article original ].
Lien vers l'article d'origineUn petit ajout de moiJ'ai préparé un Dockerfile qui vous permettra d'effectuer toutes les étapes de l'article sans avoir à déployer une machine virtuelle.
Processus d'installation:
Créez un Dockerfile.
mkdir opencv && cd opencv && mkdir armhf_opencv touch armhf_opencv/Dockerfile nano armhf_opencv/Dockerfile
Ensuite, insérez le code dans le Dockerfile et après cela, nous commençons l'assemblage de l'image.
docker image build armhf_opencv/
Une fois la construction terminée, vous devriez voir l'identifiant de l'image assemblée:
>>> Successfully built babdc99ba2d8
Nous utilisons cet identifiant pour définir la balise de l'image et l'exécuter:
docker tag babdc99ba2d8 armhf_opencv:latest docker run armhf_opencv
Après avoir démarré le conteneur, vous devez télécharger l'archive collectée et le fichier opencv.pc à partir de celui-ci. Pour ce faire, nous avons besoin de son identifiant:
docker container ls --all >>> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES >>> 369dff5a0a9b armhf_opencv "bash" 9 seconds ago Exited (0) 7 seconds ago affectionate_wu
Copiez les fichiers dont nous avons besoin dans le répertoire courant:
docker cp 369dff5a0a9b:/root/opencv-4.1.0-armhf.tar.bz2 ./ docker cp 369dff5a0a9b:/root/opencv.pc ./
Après cela, je recommande de supprimer l'image, car elle prend 2,5 Go d'espace.
La construction via docker sur mon i59600K avec 16 Go a pris environ 30 à 40 minutes, et beaucoup de temps a été consacré au téléchargement des données à partir du référentiel.
De plus, le processus d'installation sur le Raspberry Pi n'est pas différent de celui décrit dans l'article.
Dockerfile lui-même:
FROM debian:buster USER root RUN apt update && apt upgrade RUN dpkg --add-architecture armhf && \ apt update && apt install -y qemu-user-static RUN apt install -y python3-dev python3-numpy python-dev python-numpy RUN apt install -y libpython2-dev:armhf libpython3-dev:armhf \ libgtk-3-dev:armhf libcanberra-gtk3-dev:armhf \ libtiff-dev:armhf zlib1g-dev:armhf \ libjpeg-dev:armhf libpng-dev:armhf \ libavcodec-dev:armhf libavformat-dev:armhf \ libswscale-dev:armhf libv4l-dev:armhf \ libxvidcore-dev:armhf libx264-dev:armhf RUN apt install -y crossbuild-essential-armhf gfortran-arm-linux-gnueabihf RUN apt install -y cmake git pkg-config wget RUN mkdir opencv_all && cd opencv_all && \ wget -O opencv.tar.gz https://github.com/opencv/opencv/archive/4.1.0.tar.gz && \ tar -xf opencv.tar.gz -C /tmp && \ wget -O opencv_contrib.tar.gz https://github.com/opencv/opencv_contrib/archive/4.1.0.tar.gz && \ tar -xf opencv_contrib.tar.gz -C /tmp && \ rm *.tar.gz && \ export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig:/usr/share/pkgconfig && \ export PKG_CONFIG_LIBDIR=/usr/lib/arm-linux-gnueabihf/pkgconfig:/usr/share/pkgconfig && \ cd /tmp/opencv-4.1.0 && mkdir build && cd build && \ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/opt/opencv-4.1.0 \ -D CMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake \ -D OPENCV_EXTRA_MODULES_PATH=/tmp/opencv_contrib-4.1.0/modules \ -D OPENCV_ENABLE_NONFREE=ON \ -D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \ -D BUILD_TESTS=OFF \ -D BUILD_DOCS=OFF \ -D PYTHON2_INCLUDE_PATH=/usr/include/python2.7 \ -D PYTHON2_LIBRARIES=/usr/lib/arm-linux-gnueabihf/libpython2.7.so \ -D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2/dist-packages/numpy/core/include \ -D PYTHON3_INCLUDE_PATH=/usr/include/python3.7m \ -D PYTHON3_LIBRARIES=/usr/lib/arm-linux-gnueabihf/libpython3.7m.so \ -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \ -D BUILD_OPENCV_PYTHON2=ON \ -D BUILD_OPENCV_PYTHON3=ON \ -D BUILD_EXAMPLES=OFF .. && \ make -j6 && make install/strip RUN cd /opt/opencv-4.1.0/lib/python3.7/dist-packages/cv2/python-3.7/ && \ cp cv2.cpython-37m-x86_64-linux-gnu.so cv2.so RUN cd /opt && tar -cjvf /root/opencv-4.1.0-armhf.tar.bz2 opencv-4.1.0 RUN git clone https://gist.github.com/sol-prog/ed383474872958081985de733eaf352d opencv_cpp_compile_settings && \ cd opencv_cpp_compile_settings && \ cp opencv.pc /root/