(CMake) Installieren Sie das offizielle OpenCV vorsichtig auf der WSL (C / C ++, Python2, Python3).

In Verbindung stehender Artikel: Installationsverfahren für das einfache Windows-Subsystem für Linux (WSL)

Einführung

Ich habe ** die offizielle Version von OpenCV 4.1.2 unter Ubuntu von WSL (Windows Subsystem für Linux) ** installiert, daher werde ich sie als Memorandum behalten.

Das Ziel ist ** für diejenigen, die OpenCV mit C ++ ** verwenden möchten. Ich werde es installieren, damit es mit Python2 und Python3 verwendet werden kann, aber wenn Sie es nur mit Python verwenden möchten, scheint es einfach, wenn Sie "opencv-python" einschließen. Außerdem werde ich versuchen, die Befehle, die in der Mitte erscheinen, so weit wie möglich zu erklären.

Weitere Informationen finden Sie auf der offiziellen OpenCV-Seite ** (Installation unter Linux).

Ausführung

Die Umgebung, an der ich dieses Mal gearbeitet habe, war wie folgt. Als Referenz. Windows 10 Home Version 1809 Ubuntu 18.04.3 LTS OpenCV4.1.2-dev Python 2.7.15+ Python 3.6.8

Überblick

―― 1. Paketinstallation --1.1 Erforderliche Pakete --1.2 Python-dev und numpy --1.3 Optionen ―― 2. Abrufen des OpenCV-Quellcodes ―― 3. Erstellen eines Makefiles mit CMake --4 Installation durchführen --5 Funktionsprüfung (Versionsanzeige) - 5.1 Python2 - 5.2 Python3 - 5.3 C++

Bitte beachten Sie, dass die Arbeit von ** 4. ** eine Wartezeit (ca. 30 Minuten) benötigt. Bitte tun Sie dies, wenn Sie Zeit haben.

1. Paketinstallation

Führen Sie den Teil aus, der ** Erforderlichen Paketen ** auf der offiziellen Seite entspricht (Einführung in OpenCV).

Klicken Sie hier, wenn Sie von ** 1.1 ** bis ** 1.3 ** unter
installieren möchten
$ sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev libvtk5-qt4-dev libqt4-dev libqt4-opengl-dev libgtkglext1 libgtkglext1-dev python-dev python-numpy python3-dev python3-numpy

1.1 Erforderliche Pakete

Wenn Sie dies haben, können Sie vorerst ** OpenCV ** installieren und mit ** C ++ ** verwenden. Führen Sie den folgenden Befehl aus, um das Paket zu installieren.

$ sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

** Beschreibung jedes Pakets ** ** build-essential: ** * Compiler wie gcc und g ++, make usw. * ** cmake: ** Dieses Mal wird es zum Erstellen eines Makefiles verwendet, wenn ein Make-Build ausgeführt wird. Es wird auch verwendet, wenn der Vorgang überprüft wird ** 5.3.1 **. Weitere Informationen finden Sie hier (https://kamino.hatenablog.com/entry/cmake_tutorial1). ** git: ** Dieses Mal werde ich es nur verwenden, wenn ich den Quellcode von OpenCV erhalte, aber wenn Sie interessiert sind, [hier](https: //) Weitere Informationen finden Sie unter qiita.com/jesus_isao/items/63557eba36819faa4ad9). ** libgtk2.0-dev: ** GTK Bibliotheksentwicklung Es scheint ein Paket für zu sein, aber vielleicht hängt es mit dem GUI-Framework von OpenCV zusammen ** pkg-config: ** Erleichtert die Kompilierung mit gcc, g ++. Funktionsprüfung ** 5.3.2 ** wird kurz erklärt. ** libavcodec-dev, libavformat-dev, libswscale-dev: ** FFmpeg- und Libav-Entwicklungspakete.

1.2 Python-dev und numpy

Installieren Sie Python2 und Python3 sowie die entsprechende numpy.

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

: Warnung: ** Hinweis: Python und Python-Dev sind unterschiedlich. Wenn Sie bereits Python haben, führen Sie bitte den obigen Befehl aus! ** **. (Python-dev ist ein Entwicklerpaket, das Python enthält. Sie können es mehrmals installieren.)

Python-Versionsprüfung
#Python 2-Versionsprüfung
$ python -V

#Python 3-Versionsprüfung
$ python3 -V
Sie können die Version von numpy mit \ _ \ _ version__ sowie ** 5.1 ** und ** 5.2 ** überprüfen.

1.3 Optionen

Sie können OpenCV verwenden, ohne die folgenden Pakete zu installieren. Wählen Sie die gewünschte aus und installieren Sie sie. Wenn Sie sich verlaufen, installieren Sie es vorerst.

$ sudo apt install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev libvtk5-qt4-dev libqt4-dev libqt4-opengl-dev libgtkglext1 libgtkglext1-dev

** Beschreibung jedes Pakets ** ** libtbb2, libtbb-dev: ** Parallelverarbeitung durch TBB aktivieren (Threading Building Blocks) ** libjpeg-dev, libpng-dev, libtiff-dev: ** Ermöglicht die Verarbeitung von Bilddateien im JPEG-, PNG- und TIFF-Format ** libdc1394-22-dev: ** Programmierschnittstelle auf hoher Ebene für IEEE1394-Digitalkameras ** libvtk5-qt4-dev, libqt4-dev, libqt4-opengl-dev, libgtkglext1, libgtkglext1-dev: ** GUI-bezogene Pakete wie QT, OpenGL, GTK

2. Abrufen des OpenCV-Quellcodes

OpenCV und OpenCV tragen von diesem Repository (OpenCV) und diesem Repository (OpenCV Contrib) bei. Geben Sie den Quellcode von is direkt unter das Home-Verzeichnis ein. (Referenz) Einführung in opencv_contrib

#In das Ausgangsverzeichnis wechseln
$ cd ~

#Holen Sie sich den OpenCV-Quellcode
$ git clone https://github.com/opencv/opencv.git

#Holen Sie sich den OpenCV Contrib-Quellcode
$ git clone https://github.com/opencv/opencv_contrib.git

Wenn Sie die Zweige wechseln möchten (z. B. wenn Sie die Version von OpenCV ändern möchten, die Sie installieren möchten), führen Sie unter ~ / opencv etwas wie "git checkout 2.4.0" aus.

3. Erstellen eines Makefiles mit CMake

3.1 Erstellen eines Verzeichnisses zum Erstellen

Führen Sie den folgenden Befehl aus, um ein Verzeichnis für den Build (hier das Verzeichnis mit dem Namen build) direkt unter ~ / opencv zu erstellen.

$ cd ~/opencv
$ mkdir build
$ cd build

3.2 CMake ausführen

CMake (Erstellen eines Makefiles beim Erstellen eines Make) beim Festlegen von Optionen unter Bezugnahme auf CMakeLists.txt. Führen Sie den folgenden Befehl aus.

$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_OPENGL=ON -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules -D OPENCV_GENERATE_PKGCONFIG=ON ..

: Warnung: ** Hinweis 1: Vergessen Sie nicht die letzten beiden Punkte .. des CMake-Befehls! ** **. (Dies stellt die Hierarchie eine Ebene über dem aktuellen Verzeichnis dar. Hier wird der Speicherort der CMakeLists angegeben, auf die bei der Ausführung von cmake verwiesen werden soll.)

: Warnung: ** Hinweis 2: Wenn der obige Befehl nicht funktioniert, löschen Sie alle Leerzeichen nach -D wie -DCMAKE_BUILD_TYPE = Release und versuchen Sie es erneut ** (-D ist eine Option von CMake und bedeutet Umschreiben.)

** Optionsbeschreibung ** ** CMAKE_BUILD_TYPE **: Geben Sie den Modus zur Erstellungszeit an ** CMAKE_INSTALL_PREFIX **: Geben Sie das Installationsziel an ** OPENCV_EXTRA_MODULES_PATH **: Geben Sie den Pfad von OpenCV_contrib an ** OPENCV_GENERATE_PKGCONFIG **: Erstellen Sie eine PC-Datei in pkgconfig (wird beim Kompilieren von C ++ verwendet) ** WITH_TBB **: Verwenden Sie TBB (Threading Building Blocks) (C ++ parallel ausführen) ** WITH_OPENGL **: Verwendung von OPENGL ** WITH_VTK **: Verwenden von VTK

CMake-Ausführungsergebnis
Wenn Sie das oben beschriebene Verfahren bisher ausführen, erhalten Sie das folgende Ausführungsergebnis.
-- General configuration for OpenCV 4.1.2-dev =====================================
--   Version control:               4.1.2-121-g5dd3e6052e
--
--   Extra modules:
--     Location (extra):            /home/(Nutzername)/opencv_contrib/modules
--     Version control (extra):     4.1.2-32-g61cbb445
--
--   Platform:
--     Timestamp:                   2019-11-10T16:00:51Z
--     Host:                        Linux 4.4.0-17763-Microsoft x86_64
--     CMake:                       3.10.2
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/make
--     Configuration:               Release
--
--   CPU/HW features:
--     Baseline:                    SSE SSE2 SSE3
--       requested:                 SSE3
--     Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2 AVX512_SKX
--       requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
--       SSE4_1 (16 files):         + SSSE3 SSE4_1
--       SSE4_2 (2 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
--       FP16 (1 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
--       AVX (5 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
--       AVX2 (29 files):           + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2
--       AVX512_SKX (6 files):      + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX_512F AVX512_COMMON AVX512_SKX
--
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++ Compiler:                /usr/bin/c++  (ver 7.4.0)
--     C++ flags (Release):         -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
--     C++ flags (Debug):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
--     C Compiler:                  /usr/bin/cc
--     C flags (Release):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
--     C flags (Debug):             -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
--     Linker flags (Release):      -Wl,--gc-sections
--     Linker flags (Debug):        -Wl,--gc-sections
--     ccache:                      NO
--     Precompiled headers:         NO
--     Extra dependencies:          dl m pthread rt /usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libGLU.so
--     3rdparty dependencies:
--
--   OpenCV modules:
--     To be built:                 aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hdf hfs highgui img_hash imgcodecs imgproc line_descriptor ml objdetect optflow phase_unwrapping photo plot python2 python3 quality reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab viz xfeatures2d ximgproc xobjdetect xphoto
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv java js matlab ovis sfm
--     Applications:                tests perf_tests apps
--     Documentation:               NO
--     Non-free algorithms:         NO
--
--   GUI:
--     GTK+:                        YES (ver 2.24.32)
--       GThread :                  YES (ver 2.56.4)
--       GtkGlExt:                  YES (ver 1.2.0)
--     OpenGL support:              YES (/usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libGLU.so)
--     VTK support:                 YES (ver 7.1.1)
--
--   Media I/O:
--     ZLib:                        /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.11)
--     JPEG:                        /usr/lib/x86_64-linux-gnu/libjpeg.so (ver 80)
--     WEBP:                        /usr/lib/x86_64-linux-gnu/libwebp.so (ver encoder: 0x020e)
--     PNG:                         /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.6.34)
--     TIFF:                        /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 / 4.0.9)
--     JPEG 2000:                   build (ver 1.900.1)
--     OpenEXR:                     build (ver 2.3.0)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
--     PFM:                         YES
--
--   Video I/O:
--     DC1394:                      YES (2.2.5)
--     FFMPEG:                      YES
--       avcodec:                   YES (57.107.100)
--       avformat:                  YES (57.83.100)
--       avutil:                    YES (55.78.100)
--       swscale:                   YES (4.8.100)
--       avresample:                NO
--     GStreamer:                   NO
--     v4l/v4l2:                    YES (linux/videodev2.h)
--
--   Parallel framework:            TBB (ver 2017.0 interface 9107)
--
--   Trace:                         YES (with Intel ITT)
--
--   Other third-party libraries:
--     Intel IPP:                   2019.0.0 Gold [2019.0.0]
--            at:                   /home/(Nutzername)/opencv/build/3rdparty/ippicv/ippicv_lnx/icv
--     Intel IPP IW:                sources (2019.0.0)
--               at:                /home/(Nutzername)/opencv/build/3rdparty/ippicv/ippicv_lnx/iw
--     Lapack:                      NO
--     Eigen:                       YES (ver 3.3.4)
--     Custom HAL:                  NO
--     Protobuf:                    build (3.5.1)
--
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/(Nutzername)/opencv/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
--
--   Python 2:
--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.15)
--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.15+)
--     numpy:                       /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.13.3)
--     install path:                lib/python2.7/dist-packages/cv2/python-2.7
--
--   Python 3:
--     Interpreter:                 /usr/bin/python3 (ver 3.6.8)
--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.6m.so (ver 3.6.8)
--     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.13.3)
--     install path:                lib/python3.6/dist-packages/cv2/python-3.6
--
--   Python (for build):            /usr/bin/python2.7
--
--   Java:
--     ant:                         NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
--
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/(Nutzername)/opencv/build
Wenn Sie sich ** ↑ ** ansehen, können Sie sehen, dass cv2 unter "dist-packages /" von python2 und python3 installiert ist.

4. Installation durchführen

make Build. -j * ist eine Option des Befehls make, um make-Builds parallel zu verarbeiten. Führen Sie den folgenden Befehl aus. Es kann ungefähr 30 Minuten dauern. (Die parallele Option wird gemäß [Offizielle Seite] auf 7 gesetzt (https://docs.opencv.org/4.1.2/d7/d9f/tutorial_linux_install.html))

$ make -j7

Als nächstes wird make installiert. Führen Sie den folgenden Befehl aus.

$ sudo make install

Die Installation ist abgeschlossen!

5. Funktionsprüfung (Anzeige der Version)

Für Python2 und Python3 ist es einfach, weil ich denke, dass der Pfad bereits vorhanden ist. Erstellen Sie für C ++ ein Makefile mit CMake oder übergeben Sie es mit pkg-config.

Im Folgenden wird davon ausgegangen, dass Sie direkt unter ~ / opencv ausgeführt werden. Wechseln Sie mit cd ~ / opencv in Ihr Home-Verzeichnis.

5.1 Python2 Starten Sie Python über die Befehlszeile, um die Version im interaktiven Modus anzuzeigen. (Python über die Befehlszeile ausführen)

Starten Sie zunächst den interaktiven Python 2-Modus.

$ python2 #Interaktiven Modus aufrufen

Importieren Sie anschließend OpenCV im interaktiven Modus und zeigen Sie die Version von OpenCV an.

>> import cv2 #OpenCV-Import
>> print(cv2.__version__) #Version anzeigen

Wenn die installierte Version von OpenCV angezeigt wird, ist die Funktionsprüfung abgeschlossen. Beenden Sie den interaktiven Modus.

>> exit() #Ende des interaktiven Modus

5.2 Python3 ** 5.1 ** Es ist in Ordnung, wenn Sie genau das Gleiche tun können wie die Überprüfung der Funktion von python2 mit python3.

5.3 C++ Als ich schrieb, wie man CMake benutzt und wie man pkg-config benutzt, wurde es unerwartet lang, also werde ich es in einem anderen Artikel veröffentlichen. Kompilieren Sie C ++ - Code mit OpenCV (CMake, GCC, pkg-config)

[](\ # 6. Funktionsprüfung (Gesichtserkennung) ###6.1 Python2 ###6.2 Python3 ###6.3 C++)

6. Andere

Die Verwendung von OpenCV verbessert nicht nur die Bilderkennung, sondern erleichtert auch die Handhabung von Bilddateien in verschiedenen Formaten.

Eigentlich habe ich versucht, zusätzlich zur Versionsanzeige etwas mehr wie opencv zu tun, um den Betrieb zu überprüfen, aber ich bin müde, also werde ich es diesmal tun

7. Referenz

Durchsuchen Sie den Inhalt des Pakets (https://packages.ubuntu.com/ja/). Verwendung von CMake Teil 1-3 (https://qiita.com/shohirose/items/45fb49c6b429e8b204ac#_reference-27dce2bd429efef9488e)

Recommended Posts