Halo semuanya.
Ketika saya ingin menginstal OpenCV pada raspberry saya untuk satu proyek, saya sangat kecewa dengan hasilnya. Ternyata untuk versi baru gambar Raspbian yang mendukung Python3.7 tidak mungkin untuk menginstal perpustakaan dari repositori dengan perintah instal pip yang sudah dikenal.
Alasanpip install opencv-python memberi saya hasil yang tidak terduga: "Tidak dapat menemukan versi yang memenuhi persyaratan ...". Baru-baru ini, dengan cara ini saya menginstal perpustakaan ini di komputer utama saya, dan hasilnya positif.
Ketika saya mengecek diri saya untuk kelengkungan dan memastikan bahwa saya masih dapat mengetik perintah 25 karakter dengan benar tanpa kesalahan ketik, sudah waktunya untuk mencari tahu apa lagi yang dapat mempengaruhi hasil.
Halaman opencv-python resmi di pypi.org telah banyak menjelaskan:
... Perhatikan bahwa format roda (terutama manylinux) saat ini tidak mendukung arsitektur ARM dengan benar sehingga tidak ada paket untuk platform berbasis ARM di PyPI. Namun, paket opencv -python untuk Raspberry Pi dapat ditemukan di www.piwheels.org .
... Harap dicatat bahwa format roda (terutama manylinux) saat ini tidak mendukung arsitektur ARM, sehingga PyPI tidak memiliki paket untuk platform berbasis ARM. Namun, paket opencv -python untuk Raspberry Pi dapat ditemukan di www.piwheels.org .
Ok ...
Saya memeriksa apakah raspberry menarik paket-paket dari sumber yang benar, tetapi blok terakhir dari situs meletakkan semuanya di tempatnya:
Roda yang disediakan mendukung semua model Raspberry Pi (Pi 3, Pi 2, Pi 1 dan Pi Zero). Roda disediakan untuk Raspbian Jessie (Python 3.4) dan Raspbian Stretch (Python 3.5). Kami berencana untuk menambahkan dukungan untuk Raspbian Buster (Python 3.7) pada waktunya.
Roda yang disediakan mendukung semua model Raspberry Pi (Pi 3, Pi 2, Pi 1 dan Pi Zero. Roda mendukung Raspbian Jessie (Python 3.4) dan Raspbian Stretch (Python 3.5). Kami berencana untuk menambahkan dukungan untuk Raspbian Buster (Python 3.7) pada waktunya.
Saya sudah siap untuk malam tanpa tidur dengan kompilasi OpenCV pada raspberry, tetapi saya ingat tentang
artikel tentang kompilasi silang perpustakaan (bukan apa-apa yang disarankan oleh para guru di institut bahwa kami melakukan laboratorium alih-alih manual). Setelah sedikit mengubah parameter dari artikel (perlu menambahkan impor untuk python3 dan memeriksa apakah semua pustaka adalah untuk OpenCV 4.1.0), saya dapat mencapai hasil yang saya inginkan.
Namun, kemalasan mulai muncul, dan saya mulai mencari solusi yang siap pakai untuk masalah seperti itu. Jadi saya menemukan artikel ini. Mengikutinya, saya mengumpulkan semuanya pertama kali tanpa menari dengan rebana dan ritual perdukunan lainnya. Saya pikir artikel ini akan bermanfaat bagi orang lain.
Saya menyajikan terjemahan bebas saya dari artikel "
Cross kompilasi OpenCV 4 untuk Raspberry Pi dan BeagleBone Black " oleh Paul Silisteanu. Mungkin seseorang akan menghemat menit atau jam yang dapat dihabiskan untuk pelajaran yang lebih menarik daripada memainkan cerita detektif.
Dari diri saya sendiri, saya menambahkan beberapa catatan ke terjemahan, yang saya anggap penting: [
mereka disorot dalam teks ].
Selamat membaca!
OpenCV 4 kompilasi silang untuk Raspberry Pi dan BeagleBone Black
Pada artikel ini, saya akan menunjukkan kepada Anda bagaimana menginstal versi terbaru
OpenCV untuk Raspberry Pi dan BeagleBone Black menggunakan lintas-kompilasi. Pada saat penulisan artikel ini [
pembaruannya pada saat terjemahan adalah 17 Juli 2019 ], versi terbaru dari OpenCV adalah 4.1.0, dan versi yang dikirimkan dengan OS standar adalah 3.2.0. Tentu saja, dimungkinkan untuk mengkompilasi OpenCV dari sumber langsung ke Raspberry atau BeagleBone Black, tetapi ini bisa memakan waktu beberapa jam. Dan kompilasi silang OpenCV untuk armhf adalah proses yang berlangsung 20-30 menit. Dan, tergantung pada kecepatan komputer Anda, mungkin bahkan lebih cepat.
Saya sarankan membangun di mesin virtual
Debian Buster atau dalam wadah
Docker , agar tidak mengacaukan OS utama Anda. Jika Anda memutuskan untuk menginstal Buster pada mesin virtual, pastikan untuk menggunakan
build minimum [
Saya sarankan melakukan hal itu - saya memeriksanya di kulit saya sendiri ]. Sangatlah penting untuk memulai dengan sistem yang sederhana, karena kita perlu menginstal binari dan pustaka armhf. Menggunakan sistem minimal, kami menghindari potensi konflik dengan versi x86-64 asli.
Artikel ini menjelaskan bekerja hanya pada Raspberry PI dengan sistem Raspbian, tetapi jika Anda menggunakan BeagleBone Black, semuanya harus bekerja persis sama.
Saya berasumsi bahwa Anda sudah menginstal
Raspbian yang bersih. Saya menggunakan gambar versi desktop terbaru yang tersedia. Sebenarnya, Anda dapat mengikuti artikel tentang Raspbian Lite, tetapi saya melakukan semua tes saya menggunakan versi GUI.
Pertama, mari pastikan mesin atau wadah virtual kami diperbarui:
sudo apt update sudo apt upgrade
Selanjutnya, Anda perlu menghubungkan arsitektur armhf.
sudo dpkg --add-architecture armhf sudo apt update sudo apt install qemu-user-static
Pada titik ini, Anda dapat menginstal pustaka dan aplikasi untuk armhf di sistem Anda dan menjalankannya.
Kami akan membangun OpenCV dengan dukungan untuk Python dan C ++. Mari kita instal
Python2 dan Python3 , serta pakta
NumPy untuk mereka:
sudo apt-get install python3-dev sudo apt-get install python3-numpy sudo apt-get install python-dev sudo apt-get install python-numpy
Kami juga membutuhkan libpython untuk arsitektur armhf:
sudo apt-get install libpython2-dev:armhf sudo apt-get install libpython3-dev:armhf
Selanjutnya, kita akan menginstal libgtk-3 untuk dapat menulis program sederhana dengan antarmuka grafis. Jika Anda berencana untuk menggunakan OpenCV secara eksklusif dalam mode offline, Anda dapat dengan aman mengabaikan dua pustaka berikut:
$ sudo apt install libgtk-3-dev:armhf libcanberra-gtk3-dev:armhf
Kita juga perlu menginstal beberapa perpustakaan lain yang diperlukan untuk OpenCV (dukungan untuk berbagai format gambar dan 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
Selanjutnya, kita akan menginstal cross-compiler untuk Debian, yang dapat digunakan untuk membuat binari armhf untuk Raspberry Pi:
sudo apt install crossbuild-essential-armhf sudo apt install gfortran-arm-linux-gnueabihf
Pada saat penulisan ini, toolkit di atas didasarkan pada GCC versi 8.3, yang sama dengan di Raspbian.
Akhirnya, kita akan menginstal
Cmake ,
git ,
pkg-config dan wget:
sudo apt install cmake git pkg-config wget
Selanjutnya, kita dapat mengunduh versi OpenCV saat ini. Saya akan menunjukkan kepada Anda cara menginstal versi lengkap OpenCV (perpustakaan default dan 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
Kita perlu mengubah sementara dua variabel sistem yang diperlukan untuk berhasil membangun dukungan 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
Saat ini, kita dapat menggunakan Cmake untuk membuat skrip build 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 ..
Deskripsi parameterCMAKE_INSTALL_PREFIX - Direktori tempat data yang dikumpulkan akan ditemukan
CMAKE_TOOLCHAIN_FILE - Parameter yang menunjukkan Cmake cross-compilation nantinya
OPENCV_EXTRA_MODULES_PATH - Jalur ke modul OpenCV tambahan
OPENCV_ENABLE_NONFREE = ON - Sertakan algoritma yang dipatenkan dalam perakitan
Harap dicatat bahwa pembatasan paten berlaku untuk penggunaan algoritma SIFT dan SURF. Dan jika Anda berencana perakitan untuk penggunaan komersial, pikirkan apakah Anda membutuhkannya dan periksa batasannya.
ENABLE_NEON = ON - Aktifkan instruksi NEON untuk optimisasi untuk ARM
ENABLE_VFPV3 = ON - Mengaktifkan instruksi VFPv3-D32 untuk optimisasi untuk ARM
BUILD_TESTS = OFF - Nonaktifkan aturan untuk membuat tes (akan lebih cepat)
BUILD_DOCS = OFF - Nonaktifkan aturan untuk membuat dokumentasi
PYTHON2_INCLUDE_PATH - Jalan ke python2.7
PYTHON2_LIBRARY - Jalan ke perpustakaan libpython2 yang diunduh sebelumnya
PYTHON2_NUMPY_INCLUDE_DIRS - Jalan ke NumPy untuk python2.7
PYTHON3_INCLUDE_PATH - Jalan ke python3
PYTHON3_LIBRARY - Jalan ke perpustakaan libpython3 yang diunduh sebelumnya
PYTHON3_NUMPY_INCLUDE_DIRS - Jalan ke NumPy untuk python3
BUILD_OPENCV_PYTHON2 = ON - Sertakan aturan untuk python2 dalam majelis
BUILD_OPENCV_PYTHON3 = ON - Sertakan aturan untuk python4 dalam majelis
BUILD_EXAMPLES = OFF - Nonaktifkan aturan untuk mengumpulkan semua contoh
Jika Anda tidak memiliki kesalahan, maka sebagai hasilnya Anda akan menerima Makefile di folder assembly. Sekarang kita dapat memulai build aktual:
make -j16
[
Artikel ini mengindikasikan 16 proses paralel selama perakitan, tetapi parameter ini harus dipilih untuk OS host Anda ]
Setelah fase build selesai, kita dapat menginstal perpustakaan:
sudo make install/strip
Maka kita perlu mengubah nama pustaka, yang oleh installer keliru disebut pustaka x86_64, meskipun sebenarnya itu adalah 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
Mari kompres folder instalasi dan simpan arsip di direktori home:
cd /opt tar -cjvf ~/opencv-4.1.0-armhf.tar.bz2 opencv-4.1.0 cd ~
Untuk membuat hidup kita lebih mudah, saya juga menyiapkan file pengaturan pkg-config sederhana yang disebut opencv.pc. Anda dapat mengunduhnya dengan cara ini:
git clone https://gist.github.com/sol-prog/ed383474872958081985de733eaf352d opencv_cpp_compile_settings cd opencv_cpp_compile_settings cp opencv.pc ~ cd ~
[
Sebenarnya, ini tidak perlu dilakukan di mesin host. Anda dapat mengunduh file langsung ke Raspberry. Tetapi penulis ingin melakukannya dalam urutan ini ]
opencv.pcKarena file ini relatif kecil, izinkan saya memasukkannya ke dalam teks artikel: 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}
Salin opencv-4.1.0-armhf.tar.bz2 dan opencv.pc dari folder rumah Anda ke dalam RPi.
Pada bagian selanjutnya dari artikel ini, saya berasumsi bahwa Anda
sudah melakukan segalanya
pada Raspberry Pi Anda .
Pastikan RPi Anda memiliki semua pustaka pengembangan yang kami gunakan. Seperti sebelumnya, jika Anda tidak berencana menggunakan GTK +, abaikan baris pertama dari perintah berikut. Sebagian besar perpustakaan ini harus sudah diinstal jika Anda menggunakan versi lengkap 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
Buka zip dan pindahkan perpustakaan ke folder / opt RPi Anda:
tar xfv opencv-4.1.0-armhf.tar.bz2 sudo mv opencv-4.1.0 /opt
Jika mau, Anda dapat menghapus arsip:
rm opencv-4.1.0-armhf.tar.bz2
Selanjutnya, mari kita juga pindahkan opencv.pc ke folder tempat pkg-config dapat menemukannya:
sudo mv opencv.pc /usr/lib/arm-linux-gnueabihf/pkgconfig
Agar sistem operasi dapat menemukan pustaka OpenCV, kita perlu menambahkannya ke jalur pustaka:
echo 'export LD_LIBRARY_PATH=/opt/opencv-4.1.0/lib:$LD_LIBRARY_PATH' >> .bashrc source .bashrc
Logout dan log in atau restart Terminal.
Selanjutnya, buat beberapa tautan simbolis yang memungkinkan Python memuat pustaka yang baru dibuat:
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
Pada titik ini, Anda dapat menggunakan pustaka OpenCV dari C ++ atau Python.
Di
repositori untuk artikel ini, Anda bisa menemukan beberapa program pengujian dalam C ++ dan Python. Anda dapat mengunduh kode pada Pi Anda menggunakan perintah:
git clone https://github.com/sol-prog/raspberry-pi-opencv.git cd raspberry-pi-opencv/tests
Ada dua tes mandiri yang dapat Anda gunakan bahkan jika Anda tidak memiliki layar yang terhubung ke RPi Anda: cli_cpp_test.cpp dan cli_python_test.py. Saya juga menyertakan dua tes grafis yang memerlukan tampilan: gui_cpp_test.cpp dan gui_python_test.py.
Anda dapat membuat dan menjalankan tes C ++ sebagai berikut:
g++ cli_cpp_test.cpp -o cli_cpp_test `pkg-config --cflags --libs opencv` ./cli_cpp_test
Dan, jika Anda memiliki layar yang terhubung ke RPi Anda:
g++ gui_cpp_test.cpp -o gui_cpp_test `pkg-config --cflags --libs opencv` ./gui_cpp_test
Berikut adalah screenshot dari tes C ++ GUI yang berjalan di Pi saya:

Untuk pengujian Python, gunakan:
python3 cli_python_test.py
atau
python3 gui_python_test.py
Sebagai catatan, Anda juga dapat melakukan kompilasi silang program C ++ menggunakan OpenCV pada sistem Debian x86-64 Anda dan menjalankan kode biner pada RPi Anda.
[
Lebih lanjut dalam artikel ini, penulis merekomendasikan untuk membaca buku Derek Molloy tentang pemrograman untuk RaspberryPi. Anda dapat menemukan tautan rujukan ke buku di artikel asli ].
Tautan ke artikel asliTambahan kecil dari diriku sendiriSaya menyiapkan Dockerfile yang akan memungkinkan Anda untuk melakukan semua langkah dari artikel tanpa harus menggunakan mesin virtual.
Proses instalasi:
Buat Dockerfile.
mkdir opencv && cd opencv && mkdir armhf_opencv touch armhf_opencv/Dockerfile nano armhf_opencv/Dockerfile
Selanjutnya, masukkan kode ke Dockerfile dan setelah itu kita mulai perakitan gambar.
docker image build armhf_opencv/
Setelah build selesai, Anda akan melihat pengenal gambar yang dirakit:
>>> Successfully built babdc99ba2d8
Kami menggunakan pengidentifikasi ini untuk menetapkan tag untuk gambar dan menjalankannya:
docker tag babdc99ba2d8 armhf_opencv:latest docker run armhf_opencv
Setelah memulai wadah, Anda perlu memompa arsip yang sudah dirakit dan file opencv.pc darinya. Untuk melakukan ini, kita memerlukan pengenalnya:
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
Salin file yang kita butuhkan ke direktori saat ini:
docker cp 369dff5a0a9b:/root/opencv-4.1.0-armhf.tar.bz2 ./ docker cp 369dff5a0a9b:/root/opencv.pc ./
Setelah itu, saya sarankan menghapus gambar, karena membutuhkan ruang 2,5GB.
Membangun melalui buruh pelabuhan di i59600K saya dengan 16GB membutuhkan waktu sekitar 30-40 menit, dan banyak waktu dihabiskan untuk mengunduh data dari repositori.
Lebih lanjut, proses instalasi pada Raspberry Pi tidak berbeda dengan yang dijelaskan dalam artikel.
Dockerfile sendiri:
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/