Hola a todos
Cuando quise instalar OpenCV en mi frambuesa para un proyecto, me decepcionó mucho el resultado. Resultó que para las nuevas versiones de imágenes Raspbian con soporte para Python3.7, es imposible instalar la biblioteca desde el repositorio con el conocido comando de instalación pip.
Razonespip install opencv-python me dio un resultado inesperado: "No se pudo encontrar una versión que satisfaga el requisito ...". Recientemente, de esta manera instalé esta biblioteca en mi computadora principal, y el resultado fue positivo.
Cuando volví a comprobar la curvatura y me aseguré de que todavía podía escribir correctamente un comando de 25 caracteres sin errores tipográficos, era hora de averiguar qué más podría afectar el resultado.
La página oficial de opencv-python en pypi.org ha aclarado mucho:
... Tenga en cuenta que el formato de la rueda (especialmente muchoslinux) no admite actualmente la arquitectura ARM adecuada, por lo que no hay paquetes para plataformas basadas en ARM en PyPI. Sin embargo, los paquetes opencv-python para Raspberry Pi se pueden encontrar en www.piwheels.org .
... Tenga en cuenta que el formato de rueda (especialmente manylinux) no admite actualmente la arquitectura ARM, por lo que PyPI no tiene paquetes para plataformas basadas en ARM. Sin embargo, los paquetes opencv-python para Raspberry Pi se pueden encontrar en www.piwheels.org .
Ok ...
Verifiqué que la frambuesa extraía paquetes de la fuente correcta, pero el último bloque del sitio puso todo en su lugar:
Wheels proporcionó soporte para todos los modelos de Raspberry Pi (Pi 3, Pi 2, Pi 1 y Pi Zero). Se proporcionan ruedas para Raspbian Jessie (Python 3.4) y Raspbian Stretch (Python 3.5). Planeamos agregar soporte para Raspbian Buster (Python 3.7) a su debido tiempo.
Las ruedas proporcionadas son compatibles con todos los modelos de Raspberry Pi (Pi 3, Pi 2, Pi 1 y Pi Zero. Las ruedas son compatibles con Raspbian Jessie (Python 3.4) y Raspbian Stretch (Python 3.5). Planeamos agregar soporte para Raspbian Buster (Python 3.7) a su debido tiempo.
Ya estaba listo para una noche de insomnio con la compilación de OpenCV en una frambuesa, pero recordé
un artículo sobre la compilación cruzada de una biblioteca (no fue por nada que los maestros del instituto sugirieron que hiciéramos un laboratorio en lugar de manuales). Habiendo cambiado ligeramente los parámetros del artículo (era necesario agregar importación para python3 y verificar si todas las bibliotecas son para OpenCV 4.1.0), pude lograr el resultado que deseaba.
Sin embargo, la pereza se intensificó y comencé a buscar soluciones listas para tal problema. Entonces me encontré con este artículo. Siguiéndola, coleccioné todo la primera vez sin bailar con panderetas y otros rituales chamánicos. Creo que este artículo será útil para otros.
Presento mi traducción gratuita del artículo "
Compilación cruzada de OpenCV 4 para Raspberry Pi y BeagleBone Black " de Paul Silisteanu. Quizás alguien ahorrará minutos u horas que se pueden dedicar a una lección más interesante que jugar una historia de detectives.
Por mi parte, agregué algunas notas a la traducción, que consideré importantes: [
están resaltadas en el texto ].
¡Disfruta leyendo!
Compilación cruzada de OpenCV 4 para Raspberry Pi y BeagleBone Black
En este artículo, le mostraré cómo instalar la última versión de
OpenCV para Raspberry Pi y BeagleBone Black utilizando la compilación cruzada. En el momento de escribir este artículo [
su actualización en el momento de la traducción es el 17 de julio de 2019 ], la última versión de OpenCV es 4.1.0, y la versión incluida con los sistemas operativos estándar era 3.2.0. Por supuesto, es posible compilar OpenCV desde la fuente directamente a Raspberry o BeagleBone Black, pero esto puede llevar varias horas. Y la compilación cruzada de OpenCV para armhf es un proceso que dura 20-30 minutos. Y, dependiendo de la velocidad de su computadora, puede ser aún más rápido.
Recomiendo construir en una máquina virtual
Debian Buster o en un contenedor
Docker , para no saturar su sistema operativo principal. Si decide instalar Buster en una máquina virtual, asegúrese de utilizar la
compilación mínima [
Recomiendo hacer eso, lo comprobé en mi propia máscara ]. Es muy importante comenzar con un sistema simple, porque necesitamos instalar los ejecutables y las bibliotecas de armhf. Usando un sistema mínimo, evitamos posibles conflictos con las versiones nativas x86-64.
El artículo describe trabajar solo en Raspberry PI con el sistema Raspbian, pero si usa BeagleBone Black, todo debería funcionar exactamente igual.
Supongo que ya tienes un
Raspbian limpio instalado. Usé la imagen de la última versión de escritorio disponible. De hecho, puedes seguir el artículo sobre Raspbian Lite, pero hice todas mis pruebas usando la versión GUI.
Primero, asegurémonos de que nuestra máquina virtual o contenedor esté actualizado:
sudo apt update sudo apt upgrade
A continuación, debe conectar la arquitectura armhf.
sudo dpkg --add-architecture armhf sudo apt update sudo apt install qemu-user-static
En este punto, puede instalar bibliotecas y aplicaciones para armhf en su sistema y ejecutarlas.
Vamos a construir OpenCV con soporte para Python y C ++.
Instalemos Python2 y Python3 , así como el pacto
NumPy para ellos:
sudo apt-get install python3-dev sudo apt-get install python3-numpy sudo apt-get install python-dev sudo apt-get install python-numpy
También necesitaremos libpython para la arquitectura armhf:
sudo apt-get install libpython2-dev:armhf sudo apt-get install libpython3-dev:armhf
A continuación, instalaremos libgtk-3 para poder escribir programas simples con una interfaz gráfica. Si planea usar OpenCV exclusivamente en modo fuera de línea, puede ignorar las dos bibliotecas siguientes:
$ sudo apt install libgtk-3-dev:armhf libcanberra-gtk3-dev:armhf
También necesitamos instalar varias otras bibliotecas necesarias para OpenCV (soporte para varios formatos de imagen y video):
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
A continuación, vamos a instalar compiladores cruzados para Debian, que se pueden usar para crear binarios armhf para Raspberry Pi:
sudo apt install crossbuild-essential-armhf sudo apt install gfortran-arm-linux-gnueabihf
En el momento de escribir este artículo, el kit de herramientas anterior se basa en la versión 8.3 de GCC, que es la misma que en Raspbian.
Finalmente, instalaremos
Cmake ,
git ,
pkg-config y wget:
sudo apt install cmake git pkg-config wget
A continuación, podemos descargar la versión actual de OpenCV. Le mostraré cómo instalar la versión completa de OpenCV (bibliotecas predeterminadas y 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
Necesitamos cambiar temporalmente dos variables del sistema necesarias para construir con éxito el soporte 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
Por el momento, podemos usar Cmake para generar scripts de compilación de 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 ..
Descripción de los parámetros.CMAKE_INSTALL_PREFIX - Directorio donde se ubicarán los datos recopilados
CMAKE_TOOLCHAIN_FILE: parámetro que muestra a Cmake qué será la compilación cruzada
OPENCV_EXTRA_MODULES_PATH - Ruta a módulos adicionales de OpenCV
OPENCV_ENABLE_NONFREE = ON - Incluye algoritmos patentados en el ensamblaje
Tenga en cuenta que se aplican restricciones de patentes al uso de los algoritmos SIFT y SURF. Y si planea ensamblar para uso comercial, piense si los necesita y verifique las limitaciones.
ENABLE_NEON = ON - Habilita las instrucciones NEON para la optimización de ARM
ENABLE_VFPV3 = ON - Habilita las instrucciones VFPv3-D32 para la optimización de ARM
BUILD_TESTS = OFF - Desactiva las reglas para crear pruebas (será más rápido)
BUILD_DOCS = OFF - Desactivar reglas para la documentación de construcción
PYTHON2_INCLUDE_PATH - Ruta a python2.7
PYTHON2_LIBRARIES: ruta a la biblioteca libpython2 descargada previamente
PYTHON2_NUMPY_INCLUDE_DIRS - Ruta a NumPy para python2.7
PYTHON3_INCLUDE_PATH - Ruta a python3
PYTHON3_LIBRARIES: ruta a la biblioteca libpython3 descargada anteriormente
PYTHON3_NUMPY_INCLUDE_DIRS - Ruta de acceso a NumPy para python3
BUILD_OPENCV_PYTHON2 = ON - Incluye reglas para python2 en el ensamblaje
BUILD_OPENCV_PYTHON3 = ON - Incluye reglas para python4 en el ensamblaje
BUILD_EXAMPLES = OFF - Desactiva las reglas para ensamblar todos los ejemplos
Si no tuvo errores, como resultado recibirá un Makefile en la carpeta de ensamblaje. Ahora podemos comenzar la compilación real:
make -j16
[
El artículo indica 16 procesos paralelos durante el ensamblaje, pero este parámetro deberá seleccionarse para su sistema operativo host ]
Una vez completada la fase de compilación, podemos instalar la biblioteca:
sudo make install/strip
Luego, necesitamos cambiar el nombre de la biblioteca, que el instalador llamó erróneamente la biblioteca x86_64, aunque en realidad es 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
Comprimamos la carpeta de instalación y guardemos el archivo en el directorio de inicio:
cd /opt tar -cjvf ~/opencv-4.1.0-armhf.tar.bz2 opencv-4.1.0 cd ~
Para facilitarnos la vida, también preparé un archivo de configuración simple pkg-config llamado opencv.pc. Puedes descargarlo de esta manera:
git clone https://gist.github.com/sol-prog/ed383474872958081985de733eaf352d opencv_cpp_compile_settings cd opencv_cpp_compile_settings cp opencv.pc ~ cd ~
[
En realidad, no es necesario hacer esto en la máquina host. Puede descargar el archivo directamente a Raspberry. Pero el autor deseaba hacerlo en este orden ]
opencv.pcComo el archivo es relativamente pequeño, permíteme insertarlo en el texto del artículo: 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}
Copie opencv-4.1.0-armhf.tar.bz2 y opencv.pc de su carpeta de inicio en RPi.
En la siguiente parte del artículo, supongo que ya
está haciendo todo
en su Raspberry Pi .
Asegúrese de que su RPi tenga todas las bibliotecas de desarrollo que utilizamos. Como antes, si no planea usar GTK +, ignore la primera línea de los siguientes comandos. La mayoría de estas bibliotecas ya deberían estar instaladas si está utilizando la versión completa 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
Descomprima y mueva la biblioteca a la carpeta / opt de su RPi:
tar xfv opencv-4.1.0-armhf.tar.bz2 sudo mv opencv-4.1.0 /opt
Si lo desea, puede eliminar el archivo:
rm opencv-4.1.0-armhf.tar.bz2
A continuación, también vamos a mover opencv.pc a una carpeta donde pkg-config pueda encontrarlo:
sudo mv opencv.pc /usr/lib/arm-linux-gnueabihf/pkgconfig
Para que el sistema operativo pueda encontrar las bibliotecas de OpenCV, debemos agregarlas a la ruta de la biblioteca:
echo 'export LD_LIBRARY_PATH=/opt/opencv-4.1.0/lib:$LD_LIBRARY_PATH' >> .bashrc source .bashrc
Cierre sesión e inicie sesión o reinicie la Terminal.
A continuación, cree algunos enlaces simbólicos que permitirán a Python cargar las bibliotecas recién creadas:
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
En este punto, puede usar la biblioteca OpenCV de C ++ o Python.
En el
repositorio de este artículo, puede encontrar varios programas de prueba en C ++ y Python. Puede descargar el código en su Pi usando los comandos:
git clone https://github.com/sol-prog/raspberry-pi-opencv.git cd raspberry-pi-opencv/tests
Hay dos pruebas independientes que puede usar incluso si no tiene una pantalla conectada a su RPi: cli_cpp_test.cpp y cli_python_test.py. También incluí dos pruebas de gráficos que requieren visualización: gui_cpp_test.cpp y gui_python_test.py.
Puede crear y ejecutar pruebas de C ++ de la siguiente manera:
g++ cli_cpp_test.cpp -o cli_cpp_test `pkg-config --cflags --libs opencv` ./cli_cpp_test
Y, si tiene una pantalla conectada a su RPi:
g++ gui_cpp_test.cpp -o gui_cpp_test `pkg-config --cflags --libs opencv` ./gui_cpp_test
Aquí hay una captura de pantalla de la prueba de GUI de C ++ que se ejecuta en mi Pi:

Para las pruebas de Python, use:
python3 cli_python_test.py
o
python3 gui_python_test.py
Como nota, también es posible realizar una compilación cruzada de programas C ++ usando OpenCV en su sistema Debian x86-64 y ejecutar código binario en su RPi.
[
Más adelante en el artículo, el autor recomienda leer el libro de Derek Molloy sobre programación para RaspberryPi. Puede encontrar el enlace de referencia al libro en el artículo original ].
Enlace al artículo originalUna pequeña adición de mi partePreparé un Dockerfile que le permitirá realizar todos los pasos del artículo sin tener que implementar una máquina virtual.
Proceso de instalación:
Crea un Dockerfile.
mkdir opencv && cd opencv && mkdir armhf_opencv touch armhf_opencv/Dockerfile nano armhf_opencv/Dockerfile
Luego, inserte el código en el Dockerfile y luego comenzamos el ensamblaje de la imagen.
docker image build armhf_opencv/
Una vez completada la compilación, debería ver el identificador de la imagen ensamblada:
>>> Successfully built babdc99ba2d8
Usamos este identificador para establecer la etiqueta para la imagen y ejecutarla:
docker tag babdc99ba2d8 armhf_opencv:latest docker run armhf_opencv
Después de iniciar el contenedor, es necesario extraer el archivo recopilado y el archivo opencv.pc del mismo. Para hacer esto, necesitamos su identificador:
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
Copie los archivos que necesitamos en el directorio actual:
docker cp 369dff5a0a9b:/root/opencv-4.1.0-armhf.tar.bz2 ./ docker cp 369dff5a0a9b:/root/opencv.pc ./
Después de eso, recomiendo eliminar la imagen, ya que ocupa 2.5GB de espacio.
Construir a través de Docker en mi i59600K con 16GB tomó aproximadamente 30-40 minutos, y pasé mucho tiempo descargando datos del repositorio.
Además, el proceso de instalación en Raspberry Pi no es diferente del descrito en el artículo.
Dockerfile en sí:
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/