Hallo an alle.
Als ich OpenCV für ein Projekt auf meiner Himbeere installieren wollte, war ich vom Ergebnis sehr enttäuscht. Es stellte sich heraus, dass es für neue Versionen von Raspbian-Images mit Python3.7-Unterstützung unmöglich ist, die Bibliothek mit dem bekannten Befehl pip install aus dem Repository zu installieren.
Gründepip install opencv-python gab mir ein unerwartetes Ergebnis: "Es konnte keine Version gefunden werden, die die Anforderung erfüllt ...". Erst kürzlich habe ich auf diese Weise diese Bibliothek auf meinem Hauptcomputer installiert, und das Ergebnis war positiv.
Als ich mich noch einmal auf Krümmung überprüfte und sicherstellte, dass ich einen Befehl mit 25 Zeichen ohne Tippfehler immer noch korrekt eingeben konnte, war es Zeit herauszufinden, was sich sonst noch auf das Ergebnis auswirken könnte.
Die offizielle opencv-python-Seite auf pypi.org hat viel geklärt:
... Beachten Sie, dass das Wheel-Format (insbesondere manylinux) die ARM-Architektur derzeit nicht ordnungsgemäß unterstützt, sodass in PyPI keine Pakete für ARM-basierte Plattformen vorhanden sind. OpenCV-Python-Pakete für Raspberry Pi finden Sie jedoch unter www.piwheels.org .
... Bitte beachten Sie, dass das Radformat (insbesondere manylinux) die ARM-Architektur derzeit nicht ordnungsgemäß unterstützt, sodass PyPI keine Pakete für ARM-basierte Plattformen enthält. OpenCV-Python-Pakete für den Raspberry Pi finden Sie jedoch unter www.piwheels.org .
Ok ...
Ich habe überprüft, ob Himbeere Pakete aus der richtigen Quelle gezogen hat, aber der letzte Block der Site hat alles an seinen Platz gebracht:
Die bereitgestellten Räder unterstützen alle Raspberry Pi-Modelle (Pi 3, Pi 2, Pi 1 und Pi Zero). Räder werden für Raspbian Jessie (Python 3.4) und Raspbian Stretch (Python 3.5) bereitgestellt. Wir planen, Raspbian Buster (Python 3.7) zu gegebener Zeit zu unterstützen.
Die mitgelieferten Räder unterstützen alle Raspberry Pi-Modelle (Pi 3, Pi 2, Pi 1 und Pi Zero). Die Räder unterstützen Raspbian Jessie (Python 3.4) und Raspbian Stretch (Python 3.5). Wir planen, Raspbian Buster (Python 3.7) zu gegebener Zeit zu unterstützen.
Ich war bereits bereit für eine schlaflose Nacht mit der OpenCV-Zusammenstellung auf der Himbeere, aber ich erinnerte mich an den
Artikel über das Cross-Zusammenstellen der Bibliothek (nicht umsonst schlugen die Lehrer des Instituts vor, dass wir ein Labor anstelle von Handbüchern durchführen). Nachdem ich die Parameter des Artikels geringfügig geändert hatte (es war notwendig, den Import für Python3 hinzuzufügen und zu überprüfen, ob alle Bibliotheken für OpenCV 4.1.0 sind), konnte ich das gewünschte Ergebnis erzielen.
Die Faulheit nahm jedoch zu und ich suchte nach vorgefertigten Lösungen für ein solches Problem. Also bin ich auf diesen Artikel gestoßen. Ich folgte ihr und sammelte das erste Mal alles, ohne mit Tamburinen und anderen schamanistischen Ritualen zu tanzen. Ich denke, dieser Artikel wird für andere nützlich sein.
Ich präsentiere meine kostenlose Übersetzung des Artikels „
Cross Compiling OpenCV 4 für Raspberry Pi und BeagleBone Black “ von Paul Silisteanu. Vielleicht spart jemand Minuten oder Stunden, die für eine interessantere Lektion aufgewendet werden können als das Spielen einer Detektivgeschichte.
Von mir selbst habe ich der Übersetzung einige Anmerkungen hinzugefügt, die ich für wichtig hielt: [
sie werden im Text hervorgehoben ].
Viel Spaß beim Lesen!
Cross-Kompilieren von OpenCV 4 für Raspberry Pi und BeagleBone Black
In diesem Artikel werde ich Ihnen zeigen, wie Sie die neueste Version von
OpenCV für Raspberry Pi und BeagleBone Black mithilfe von Cross-Compilation installieren. Zum Zeitpunkt des Schreibens dieses Artikels [
das Update zum Zeitpunkt der Übersetzung ist der 17. Juli 2019 ] war die neueste Version von OpenCV 4.1.0 und die mit Standardbetriebssystemen gelieferte Version war 3.2.0. Natürlich ist es möglich, OpenCV von der Quelle direkt nach Raspberry oder BeagleBone Black zu kompilieren, aber dies kann mehrere Stunden dauern. Das Cross-Compilieren von OpenCV für armhf dauert 20 bis 30 Minuten. Und abhängig von der Geschwindigkeit Ihres Computers kann es sogar noch schneller sein.
Ich empfehle, eine virtuelle
Debian Buster- Maschine oder einen
Docker- Container einzubauen, um Ihr Hauptbetriebssystem nicht zu überladen. Wenn Sie Buster auf einer virtuellen Maschine installieren möchten, stellen Sie sicher, dass Sie den
Mindestaufbau verwenden [
Ich empfehle, genau das zu tun - ich habe es auf meiner eigenen Skin überprüft ]. Es ist sehr wichtig, mit einem einfachen System zu beginnen, da wir die armhf-Binärdateien und -Bibliotheken installieren müssen. Mit einem minimalen System vermeiden wir mögliche Konflikte mit nativen x86-64-Versionen.
Der Artikel beschreibt die Arbeit nur mit Raspberry PI mit dem Raspbian-System. Wenn Sie jedoch BeagleBone Black verwenden, sollte alles genau gleich funktionieren.
Ich gehe davon aus, dass Sie bereits einen sauberen
Raspbian installiert haben. Ich habe das Image der neuesten verfügbaren Desktop-Version verwendet. Tatsächlich können Sie dem Artikel über Raspbian Lite folgen, aber ich habe alle meine Tests mit der GUI-Version durchgeführt.
Stellen wir zunächst sicher, dass unsere virtuelle Maschine oder unser Container aktualisiert ist:
sudo apt update sudo apt upgrade
Als nächstes müssen Sie die armhf-Architektur verbinden.
sudo dpkg --add-architecture armhf sudo apt update sudo apt install qemu-user-static
Zu diesem Zeitpunkt können Sie Bibliotheken und Anwendungen für armhf auf Ihrem System installieren und ausführen.
Wir werden OpenCV mit Unterstützung für Python und C ++ erstellen. Lassen Sie uns
Python2 und Python3 sowie den
NumPy- Pakt für sie installieren:
sudo apt-get install python3-dev sudo apt-get install python3-numpy sudo apt-get install python-dev sudo apt-get install python-numpy
Wir werden auch libpython für die armhf-Architektur benötigen:
sudo apt-get install libpython2-dev:armhf sudo apt-get install libpython3-dev:armhf
Als nächstes werden wir libgtk-3 installieren, um einfache Programme mit einer grafischen Oberfläche schreiben zu können. Wenn Sie OpenCV ausschließlich im Offline-Modus verwenden möchten, können Sie die folgenden zwei Bibliotheken ignorieren:
$ sudo apt install libgtk-3-dev:armhf libcanberra-gtk3-dev:armhf
Wir müssen auch mehrere andere für OpenCV erforderliche Bibliotheken installieren (Unterstützung für verschiedene Bild- und Videoformate):
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
Als nächstes werden wir Cross-Compiler für Debian installieren, mit denen Armhf-Binärdateien für den Raspberry Pi erstellt werden können:
sudo apt install crossbuild-essential-armhf sudo apt install gfortran-arm-linux-gnueabihf
Zum Zeitpunkt dieses Schreibens basiert das obige Toolkit auf GCC Version 8.3, die mit Raspbian identisch ist.
Schließlich werden wir
Cmake ,
git ,
pkg-config und wget installieren:
sudo apt install cmake git pkg-config wget
Als nächstes können wir die aktuelle Version von OpenCV herunterladen. Ich werde Ihnen zeigen, wie Sie die Vollversion von OpenCV (Standard- und Contrib-Bibliotheken) installieren:
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
Wir müssen vorübergehend zwei Systemvariablen ändern, die für den erfolgreichen Aufbau der GTK + -Unterstützung erforderlich sind:
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
Im Moment können wir Cmake verwenden, um OpenCV-Build-Skripte zu generieren:
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 ..
Beschreibung der ParameterCMAKE_INSTALL_PREFIX - Verzeichnis, in dem sich die gesammelten Daten befinden
CMAKE_TOOLCHAIN_FILE - Parameter, der Cmake anzeigt, was Cross-Compilation sein wird
OPENCV_EXTRA_MODULES_PATH - Pfad zu weiteren OpenCV-Modulen
OPENCV_ENABLE_NONFREE = ON - Nehmen Sie patentierte Algorithmen in die Assembly auf
Bitte beachten Sie, dass für die Verwendung von SIFT- und SURF-Algorithmen Patentbeschränkungen gelten. Wenn Sie eine Montage für den kommerziellen Gebrauch planen, überlegen Sie, ob Sie sie benötigen, und überprüfen Sie die Einschränkungen.
ENABLE_NEON = ON - Aktivieren Sie die NEON-Anweisungen für die Optimierung für ARM
ENABLE_VFPV3 = ON - Aktivieren Sie die VFPv3-D32-Anweisungen zur Optimierung für ARM
BUILD_TESTS = OFF - Deaktiviert Regeln für Gebäudetests (es wird schneller sein)
BUILD_DOCS = OFF - Deaktiviert Regeln für die Gebäudedokumentation
PYTHON2_INCLUDE_PATH - Pfad zu Python2.7
PYTHON2_LIBRARIES - Pfad zur zuvor heruntergeladenen libpython2-Bibliothek
PYTHON2_NUMPY_INCLUDE_DIRS - Pfad zu NumPy für Python2.7
PYTHON3_INCLUDE_PATH - Pfad zu Python3
PYTHON3_LIBRARIES - Pfad zur zuvor heruntergeladenen libpython3-Bibliothek
PYTHON3_NUMPY_INCLUDE_DIRS - Pfad zu NumPy für Python3
BUILD_OPENCV_PYTHON2 = ON - Regeln für Python2 in die Assembly aufnehmen
BUILD_OPENCV_PYTHON3 = ON - Fügen Sie Regeln für python4 in die Assembly ein
BUILD_EXAMPLES = OFF - Deaktiviert Regeln zum Zusammenstellen aller Beispiele
Wenn Sie keine Fehler hatten, erhalten Sie als Ergebnis ein Makefile im Assembly-Ordner. Jetzt können wir den eigentlichen Build starten:
make -j16
[
Der Artikel zeigt 16 parallele Prozesse während der Montage an, aber dieser Parameter muss für Ihr Host-Betriebssystem ausgewählt werden. ]
Nach Abschluss der Erstellungsphase können wir die Bibliothek installieren:
sudo make install/strip
Dann müssen wir den Namen der Bibliothek ändern, die das Installationsprogramm fälschlicherweise als x86_64-Bibliothek bezeichnet hat, obwohl es sich tatsächlich um armhf handelt:
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
Komprimieren wir den Installationsordner und speichern das Archiv im Ausgangsverzeichnis:
cd /opt tar -cjvf ~/opencv-4.1.0-armhf.tar.bz2 opencv-4.1.0 cd ~
Um unser Leben einfacher zu machen, habe ich auch eine einfache pkg-config-Einstellungsdatei namens opencv.pc vorbereitet. Sie können es folgendermaßen herunterladen:
git clone https://gist.github.com/sol-prog/ed383474872958081985de733eaf352d opencv_cpp_compile_settings cd opencv_cpp_compile_settings cp opencv.pc ~ cd ~
[
Eigentlich ist es nicht notwendig, dies auf dem Host-Computer zu tun. Sie können die Datei direkt auf Raspberry herunterladen. Aber der Autor wollte es in dieser Reihenfolge tun ]
opencv.pcDa die Datei relativ klein ist, möchte ich sie in den Text des Artikels einfügen: 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}
Kopieren Sie opencv-4.1.0-armhf.tar.bz2 und opencv.pc aus Ihrem Home-Ordner in RPi.
Im nächsten Teil des Artikels gehe ich davon aus, dass Sie
bereits alles
auf Ihrem Raspberry Pi tun .
Stellen Sie sicher, dass Ihr RPi über alle von uns verwendeten Entwicklungsbibliotheken verfügt. Wenn Sie GTK + nicht verwenden möchten, ignorieren Sie nach wie vor die erste Zeile der folgenden Befehle. Die meisten dieser Bibliotheken sollten bereits installiert sein, wenn Sie die Vollversion von Raspbian verwenden:
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
Entpacken Sie die Bibliothek und verschieben Sie sie in den Ordner / opt Ihres RPi:
tar xfv opencv-4.1.0-armhf.tar.bz2 sudo mv opencv-4.1.0 /opt
Wenn Sie möchten, können Sie das Archiv löschen:
rm opencv-4.1.0-armhf.tar.bz2
Als nächstes verschieben wir opencv.pc in einen Ordner, in dem pkg-config es finden kann:
sudo mv opencv.pc /usr/lib/arm-linux-gnueabihf/pkgconfig
Damit das Betriebssystem die OpenCV-Bibliotheken finden kann, müssen wir sie dem Bibliothekspfad hinzufügen:
echo 'export LD_LIBRARY_PATH=/opt/opencv-4.1.0/lib:$LD_LIBRARY_PATH' >> .bashrc source .bashrc
Melden Sie sich ab und melden Sie sich an oder starten Sie das Terminal neu.
Erstellen Sie als Nächstes einige symbolische Links, mit denen Python die neu erstellten Bibliotheken laden kann:
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
Zu diesem Zeitpunkt können Sie die OpenCV-Bibliothek aus C ++ oder Python verwenden.
Im
Repository für diesen Artikel finden Sie mehrere Testprogramme in C ++ und Python. Sie können den Code mit den folgenden Befehlen auf Ihren Pi herunterladen:
git clone https://github.com/sol-prog/raspberry-pi-opencv.git cd raspberry-pi-opencv/tests
Es gibt zwei eigenständige Tests, die Sie verwenden können, auch wenn kein Display mit Ihrem RPi verbunden ist: cli_cpp_test.cpp und cli_python_test.py. Ich habe auch zwei Grafiktests eingefügt, die angezeigt werden müssen: gui_cpp_test.cpp und gui_python_test.py.
Sie können C ++ - Tests wie folgt erstellen und ausführen:
g++ cli_cpp_test.cpp -o cli_cpp_test `pkg-config --cflags --libs opencv` ./cli_cpp_test
Und wenn Sie ein Display an Ihr RPi angeschlossen haben:
g++ gui_cpp_test.cpp -o gui_cpp_test `pkg-config --cflags --libs opencv` ./gui_cpp_test
Hier ist ein Screenshot des C ++ - GUI-Tests, der auf meinem Pi ausgeführt wird:

Verwenden Sie für Python-Tests:
python3 cli_python_test.py
oder
python3 gui_python_test.py
Hinweis: Es ist auch möglich, C ++ - Programme mit OpenCV auf Ihrem Debian x86-64-System zu kompilieren und Binärcode auf Ihrem RPi auszuführen.
[
Weiter im Artikel empfiehlt der Autor, Derek Molloys Buch über die Programmierung für RaspberryPi zu lesen. Den Verweislink zum Buch finden Sie im Originalartikel .
Link zum OriginalartikelEine kleine Ergänzung von mirIch habe eine Docker-Datei vorbereitet, mit der Sie alle Schritte aus dem Artikel ausführen können, ohne eine virtuelle Maschine bereitstellen zu müssen.
Installationsprozess:
Erstellen Sie eine Docker-Datei.
mkdir opencv && cd opencv && mkdir armhf_opencv touch armhf_opencv/Dockerfile nano armhf_opencv/Dockerfile
Als nächstes fügen wir den Code in die Docker-Datei ein und starten danach die Assemblierung des Bildes.
docker image build armhf_opencv/
Nach Abschluss des Builds sollte die Kennung des zusammengestellten Images angezeigt werden:
>>> Successfully built babdc99ba2d8
Wir verwenden diesen Bezeichner, um das Tag für das Bild festzulegen und es auszuführen:
docker tag babdc99ba2d8 armhf_opencv:latest docker run armhf_opencv
Nach dem Starten des Containers müssen das zusammengestellte Archiv und die Datei opencv.pc daraus abgepumpt werden. Dazu benötigen wir die Kennung:
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
Kopieren Sie die benötigten Dateien in das aktuelle Verzeichnis:
docker cp 369dff5a0a9b:/root/opencv-4.1.0-armhf.tar.bz2 ./ docker cp 369dff5a0a9b:/root/opencv.pc ./
Danach empfehle ich, das Bild zu löschen, da es 2,5 GB Speicherplatz beansprucht.
Das Erstellen über Docker auf meinem i59600K mit 16 GB dauerte etwa 30 bis 40 Minuten, und es wurde viel Zeit damit verbracht, Daten aus dem Repository herunterzuladen.
Außerdem unterscheidet sich der Installationsprozess auf dem Raspberry Pi nicht von dem im Artikel beschriebenen.
Dockerfile selbst:
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/