Compilação cruzada OpenCV 4 para Raspberry Pi e BeagleBone Black

Olá pessoal.

Quando quis instalar o OpenCV no meu raspberry para um projeto, fiquei muito decepcionado com o resultado. Verificou-se que, para novas versões de imagens Raspbian com suporte ao Python3.7, é impossível instalar a biblioteca do repositório com o comando familiar pip install.

Razões
A instalação do pip opencv-python me deu um resultado inesperado: "Não foi possível encontrar uma versão que atenda ao requisito ...". Recentemente, instalei esta biblioteca no meu computador principal e o resultado foi positivo.

Quando eu me verifiquei novamente em busca de curvatura e verifiquei que ainda era capaz de digitar corretamente um comando de 25 caracteres sem erros de digitação, era hora de descobrir o que mais poderia afetar o resultado.

A página oficial do opencv-python em pypi.org esclareceu bastante:
... Observe que o formato wheel (especialmente manylinux) atualmente não suporta adequadamente a arquitetura ARM, portanto, não há pacotes para plataformas baseadas em ARM no PyPI. No entanto, os pacotes opencv-python para Raspberry Pi podem ser encontrados em www.piwheels.org .

... Observe que o formato wheel (especialmente o linuxlinux) atualmente não suporta adequadamente a arquitetura ARM, portanto, o PyPI não possui pacotes para plataformas baseadas em ARM. No entanto, os pacotes opencv-python para o Raspberry Pi podem ser encontrados em www.piwheels.org .
Ok ...

Eu verifiquei que o raspberry estava puxando pacotes da fonte correta, mas o último bloco do site colocou tudo em seu devido lugar:
As rodas fornecidas suportam todos os modelos Raspberry Pi (Pi 3, Pi 2, Pi 1 e Pi Zero). As rodas são fornecidas para o Raspbian Jessie (Python 3.4) e Raspbian Stretch (Python 3.5). Planejamos adicionar suporte ao Raspbian Buster (Python 3.7) no devido tempo.

As rodas fornecidas suportam todos os modelos Raspberry Pi (Pi 3, Pi 2, Pi 1 e Pi Zero. As rodas suportam Raspbian Jessie (Python 3.4) e Raspbian Stretch (Python 3.5). Planejamos adicionar suporte ao Raspbian Buster (Python 3.7) no devido tempo.
Eu já estava pronto para uma noite sem dormir com a compilação do OpenCV em uma framboesa, mas lembrei de um artigo sobre a compilação cruzada de uma biblioteca (não foi à toa que os professores do instituto sugeriram que façamos um laboratório em vez de manuais). Depois de alterar ligeiramente os parâmetros do artigo (era necessário adicionar a importação para python3 e verificar se todas as bibliotecas são para o OpenCV 4.1.0), consegui o resultado desejado.

No entanto, a preguiça tomou conta e comecei a procurar soluções prontas para esse problema. Então me deparei com este artigo. Depois dela, colecionei tudo pela primeira vez sem dançar com pandeiros e outros rituais xamânicos. Eu acho que este artigo será útil para outras pessoas.

Apresento minha tradução gratuita do artigo “ Compilação cruzada do OpenCV 4 para Raspberry Pi e BeagleBone Black ”, de Paul Silisteanu. Talvez alguém economize minutos ou horas que podem ser gastos em uma lição mais interessante do que fazer uma história de detetive.

Acrescentei algumas anotações à tradução, que considerei importantes: [ elas são destacadas no texto ].

Boa leitura!

Compilação cruzada OpenCV 4 para Raspberry Pi e BeagleBone Black


Neste artigo, mostrarei como instalar a versão mais recente do OpenCV para Raspberry Pi e BeagleBone Black usando compilação cruzada. No momento da redação deste documento [ sua atualização no momento da tradução é 17 de julho de 2019 ], a versão mais recente do OpenCV é a 4.1.0, e a versão fornecida com os SOs padrão era a 3.2.0. Obviamente, é possível compilar o OpenCV da fonte diretamente para o Raspberry ou o BeagleBone Black, mas isso pode levar várias horas. A compilação cruzada de OpenCV para armhf é um processo que dura de 20 a 30 minutos. E, dependendo da velocidade do seu computador, pode ser ainda mais rápido.

Eu recomendo construir em uma máquina virtual Debian Buster ou em um contêiner Docker , para não bagunçar o sistema operacional principal. Se você decidir instalar o Buster em uma máquina virtual, use a compilação mínima [ eu recomendo fazer isso - verifiquei na minha própria pele ]. É muito importante começar com um sistema simples, porque precisamos instalar os executáveis ​​e bibliotecas armhf. Usando um sistema mínimo, evitamos possíveis conflitos com as versões nativas do x86-64.

O artigo descreve o trabalho apenas no PI Raspberry com o sistema Raspbian, mas se você usar o BeagleBone Black, tudo deverá funcionar exatamente da mesma maneira.

Presumo que você já tenha um Raspbian limpo instalado. Usei a imagem da versão mais recente disponível para desktop. De fato, você pode seguir o artigo sobre o Raspbian Lite, mas fiz todos os meus testes usando a versão da GUI.

Primeiro, verifique se nossa máquina virtual ou contêiner está atualizado:

sudo apt update sudo apt upgrade 

Em seguida, você precisa conectar a arquitetura armhf.

 sudo dpkg --add-architecture armhf sudo apt update sudo apt install qemu-user-static 

Neste ponto, você pode instalar bibliotecas e aplicativos para o armhf no seu sistema e executá-los.

Vamos criar o OpenCV com suporte para Python e C ++. Vamos instalar o Python2 e o Python3 , bem como o pacto do NumPy para eles:

 sudo apt-get install python3-dev sudo apt-get install python3-numpy sudo apt-get install python-dev sudo apt-get install python-numpy 

Também precisaremos do libpython para a arquitetura armhf:

 sudo apt-get install libpython2-dev:armhf sudo apt-get install libpython3-dev:armhf 

Em seguida, instalaremos o libgtk-3 para poder escrever programas simples com uma interface gráfica. Se você planeja usar o OpenCV exclusivamente no modo offline, pode ignorar com segurança as duas bibliotecas a seguir:

 $ sudo apt install libgtk-3-dev:armhf libcanberra-gtk3-dev:armhf 

Também precisamos instalar várias outras bibliotecas necessárias para o OpenCV (suporte para vários formatos de imagem e vídeo):

 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 

Em seguida, instalaremos os compiladores cruzados para o Debian, que podem ser usados ​​para criar binários armhf para o Raspberry Pi:

 sudo apt install crossbuild-essential-armhf sudo apt install gfortran-arm-linux-gnueabihf 

No momento da redação deste artigo, o kit de ferramentas acima é baseado na versão 8.3 do GCC, que é a mesma do Raspbian.

Por fim, instalaremos Cmake , git , pkg-config e wget:

 sudo apt install cmake git pkg-config wget 

Em seguida, podemos baixar a versão atual do OpenCV. Vou mostrar como instalar a versão completa do OpenCV (bibliotecas padrão e de contribuição):

 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 

Precisamos alterar temporariamente duas variáveis ​​do sistema necessárias para criar com êxito o suporte ao 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 

No momento, podemos usar o Cmake para gerar scripts de construção do 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 .. 

Descrição dos parâmetros
CMAKE_INSTALL_PREFIX - Diretório onde os dados coletados serão localizados
CMAKE_TOOLCHAIN_FILE - Parâmetro mostrando ao Cmake o que será a compilação cruzada
OPENCV_EXTRA_MODULES_PATH - Caminho para módulos OpenCV adicionais
OPENCV_ENABLE_NONFREE = ON - Incluir algoritmos patenteados no assembly
Observe que as restrições de patente se aplicam ao uso dos algoritmos SIFT e SURF. E se você planeja montar para uso comercial, pense se você precisa deles e verifique as limitações.
ENABLE_NEON = ON - Ative as instruções NEON para otimização para ARM
ENABLE_VFPV3 = ON - Ative as instruções VFPv3-D32 para otimização para ARM
BUILD_TESTS = OFF - Desativar regras para criar testes (será mais rápido)
BUILD_DOCS = OFF - Desativar regras para criar documentação
PYTHON2_INCLUDE_PATH - Caminho para python2.7
PYTHON2_LIBRARIES - Caminho para a biblioteca libpython2 baixada anteriormente
PYTHON2_NUMPY_INCLUDE_DIRS - Caminho para NumPy para python2.7
PYTHON3_INCLUDE_PATH - Caminho para python3
PYTHON3_LIBRARIES - Caminho para a biblioteca libpython3 baixada anteriormente
PYTHON3_NUMPY_INCLUDE_DIRS - Caminho para NumPy para python3
BUILD_OPENCV_PYTHON2 = ON - Incluir regras para python2 no assembly
BUILD_OPENCV_PYTHON3 = ON - Incluir regras para python4 no assembly
BUILD_EXAMPLES = OFF - Desativar regras para montar todos os exemplos

Se você não teve erros, como resultado, você receberá um Makefile na pasta assembly. Agora podemos começar a compilação real:

 make -j16 

[ O artigo indica 16 processos paralelos durante a montagem, mas esse parâmetro precisará ser selecionado para o SO do host ]

Após a fase de compilação estar concluída, podemos instalar a biblioteca:

 sudo make install/strip 

Então precisamos alterar o nome da biblioteca, que o instalador chamou erroneamente de biblioteca x86_64, embora na verdade seja 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 

Vamos compactar a pasta de instalação e salvar o arquivo no diretório inicial:

 cd /opt tar -cjvf ~/opencv-4.1.0-armhf.tar.bz2 opencv-4.1.0 cd ~ 

Para facilitar nossa vida, também preparei um arquivo de configurações simples do pkg-config chamado opencv.pc. Você pode fazer o download desta maneira:

 git clone https://gist.github.com/sol-prog/ed383474872958081985de733eaf352d opencv_cpp_compile_settings cd opencv_cpp_compile_settings cp opencv.pc ~ cd ~ 

[ Na verdade, não é necessário fazer isso na máquina host. Você pode baixar o arquivo diretamente para o Raspberry. Mas o autor desejava fazê-lo nesta ordem ]

opencv.pc
Como o arquivo é relativamente pequeno, deixe-o inseri-lo no texto do artigo:

 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 o opencv-4.1.0-armhf.tar.bz2 e o opencv.pc da sua pasta pessoal para o RPi.

Na próxima parte do artigo, presumo que você já esteja fazendo tudo no seu Raspberry Pi .

Verifique se o seu RPi possui todas as bibliotecas de desenvolvimento que usamos. Como antes, se você não planeja usar o GTK +, ignore a primeira linha dos seguintes comandos. A maioria dessas bibliotecas já deve estar instalada se você estiver usando a versão completa do 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 

Descompacte e mova a biblioteca para a pasta / opt do seu RPi:

 tar xfv opencv-4.1.0-armhf.tar.bz2 sudo mv opencv-4.1.0 /opt 

Se desejar, você pode excluir o arquivo:

 rm opencv-4.1.0-armhf.tar.bz2 

A seguir, vamos também mover o opencv.pc para uma pasta na qual o pkg-config possa encontrá-lo:

 sudo mv opencv.pc /usr/lib/arm-linux-gnueabihf/pkgconfig 

Para que o sistema operacional possa encontrar as bibliotecas OpenCV, precisamos adicioná-las ao caminho da biblioteca:

 echo 'export LD_LIBRARY_PATH=/opt/opencv-4.1.0/lib:$LD_LIBRARY_PATH' >> .bashrc source .bashrc 

Faça logout e efetue login ou reinicie o Terminal.

Em seguida, crie alguns links simbólicos que permitirão ao Python carregar as bibliotecas recém-criadas:

 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 

Neste ponto, você pode usar a biblioteca OpenCV do C ++ ou Python.
No repositório deste artigo, você pode encontrar vários programas de teste em C ++ e Python. Você pode baixar o código no seu Pi usando os comandos:

 git clone https://github.com/sol-prog/raspberry-pi-opencv.git cd raspberry-pi-opencv/tests 

Existem dois testes independentes que você pode usar, mesmo que não tenha um monitor conectado ao seu RPi: cli_cpp_test.cpp e cli_python_test.py. Também incluí dois testes gráficos que exigem exibição: gui_cpp_test.cpp e gui_python_test.py.

Você pode criar e executar testes de C ++ da seguinte maneira:

 g++ cli_cpp_test.cpp -o cli_cpp_test `pkg-config --cflags --libs opencv` ./cli_cpp_test 

E, se você tiver um monitor conectado ao seu RPi:

 g++ gui_cpp_test.cpp -o gui_cpp_test `pkg-config --cflags --libs opencv` ./gui_cpp_test 

Aqui está uma captura de tela do teste C ++ GUI em execução no meu Pi:



Para testes Python, use:

 python3 cli_python_test.py 

ou

 python3 gui_python_test.py 

Como observação, também é possível compilar programas C ++ usando o OpenCV no seu sistema Debian x86-64 e executar código binário no seu RPi.

[ Mais adiante no artigo, o autor recomenda a leitura do livro de Derek Molloy sobre programação para RaspberryPi. Você pode encontrar o link de referência para o livro no artigo original ].
Link para o artigo original

Uma pequena adição minha
Eu preparei um Dockerfile que permitirá que você execute todas as etapas do artigo sem precisar implantar uma máquina virtual.

Processo de instalação:
Crie um Dockerfile.

 mkdir opencv && cd opencv && mkdir armhf_opencv touch armhf_opencv/Dockerfile nano armhf_opencv/Dockerfile 

Em seguida, colamos o código no Dockerfile e depois iniciamos o assembly da imagem.

 docker image build armhf_opencv/ 

Após a conclusão da compilação, você deverá ver o identificador da imagem montada:

 >>> Successfully built babdc99ba2d8 

Usamos esse identificador para definir a tag da imagem e executá-la:

 docker tag babdc99ba2d8 armhf_opencv:latest docker run armhf_opencv 

Após iniciar o contêiner, é necessário extrair o arquivo montado e o arquivo opencv.pc. Para fazer isso, precisamos do seu 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 os arquivos necessários para o diretório atual:

 docker cp 369dff5a0a9b:/root/opencv-4.1.0-armhf.tar.bz2 ./ docker cp 369dff5a0a9b:/root/opencv.pc ./ 

Depois disso, recomendo excluir a imagem, pois ela ocupa 2,5 GB de espaço.

A construção através do docker no meu i59600K com 16 GB demorou cerca de 30 a 40 minutos e gastou muito tempo baixando dados do repositório.

Além disso, o processo de instalação no Raspberry Pi não é diferente do descrito no artigo.

Dockerfile:

 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/ 

Source: https://habr.com/ru/post/pt461693/


All Articles