Guten Tag allerseits. Es gibt bereits viele Artikel über die Arbeit mit OpenCV on Go im Hub ( und im Internet ).Der fertige Code ist sicherlich interessant, aber detailliertere Informationen zur Installation von Treibern müssen in Teilen gesammelt werden - ich werde versuchen, alle erforderlichen Gesten in einem Artikel zu kombinieren.Ich habe einen Laptop mit Ubuntu 18.04 an Bord,- CPU: Intel
- GPU: Intel / Nvidia
Nvidia und Intel versuchen sich gegenseitig zu schlagen, und ich werde versuchen, gleichzeitig OpenVino und Cuda auszunutzen.Ich warne Sie sofort, um Cuda zu verwenden, benötigen Sie eine Mindest-Rechenkapazität (Version) 5.3, die Sie für Ihre Grafikkarte hier sehen können
Cuda
Ich habe Cuda 10.0 gewählt, damit ich auch Tensorflow verwenden kann.Zuerst müssen Sie ein Paket mit developer.nvidia.com herunterladen (z. B. den
Set-Befehl runtime (local) )sudo sh cuda_10.0.130_410.48_linux.run
cudNN
Link zu PaketenSie müssen die Version auswählen, die zu Cuda passtLaden Sie cuDNN v7.5.0 (21. Februar 2019) für CUDA 10.0 herunter
Und laden Sie zwei Deb-Pakete heruntercuDNN-Entwicklerbibliothek für Ubuntu18.04 (Deb)
cuDNN-Entwicklerbibliothek für Ubuntu18.04 (Deb)
Wenn Sie kein Konto unter https://developer.nvidia.com/ haben , werden Sie aufgefordert, die
Installation zu registrieren :sudo dpkg -i libcudnn7-dev_7.5.0.56-1+cuda10.0_amd64.deb
sudo dpkg -i libcudnn7_7.5.0.56-1+cuda10.0_amd64.deb
Intel OpenCL-Treiber
Link zum Repository .Installation:wget https://github.com/intel/compute-runtime/releases/download/20.04.15428/intel-gmmlib_19.4.1_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/20.04.15428/intel-igc-core_1.0.3151_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/20.04.15428/intel-igc-opencl_1.0.3151_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/20.04.15428/intel-opencl_20.04.15428_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/20.04.15428/intel-ocloc_20.04.15428_amd64.deb
sudo dpkg -i *.deb
Opencv + OpenVinoScript (natürlich mit Krücken), das alles selbst sammelt.run.sh#!/bin/bash
git clone https://github.com/opencv/dldt -b 2019 && \
(cd dldt/inference-engine && \
git submodule init && \
git submodule update --recursive && \
./install_dependencies.sh && \
mv -f thirdparty/clDNN/common/intel_ocl_icd/6.3/linux/Release thirdparty/clDNN/common/intel_ocl_icd/6.3/linux/RELEASE && \
mkdir -p build && \
cd build && \
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D BUILD_SHARED_LIBS=ON \
-D ENABLE_TESTS=OFF \
-D ENABLE_VPU=ON \
-D ENABLE_MKL_DNN=ON \
-D ENABLE_CLDNN=ON .. && \
make -j $(nproc --all) && \
touch VERSION && \
mkdir -p src/ngraph && \
sudo cp -r ../bin/intel64/RELEASE/lib/* /usr/local/lib && \
cp thirdparty/ngraph/src/ngraph/version.hpp src/ngraph && \
sudo make install)
OPENCV_VERSION="4.2.0"
curl -Lo opencv.zip https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
unzip -q opencv.zip && \
curl -Lo opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \
unzip -q opencv_contrib.zip && \
rm opencv.zip opencv_contrib.zip && \
(cd opencv-${OPENCV_VERSION} && \
mkdir build && cd build && \
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
-D InferenceEngine_DIR=../../../dldt/inference-engine/build \
-D WITH_JASPER=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_EXAMPLES=OFF \
-D ENABLE_CXX11=ON \
-D WITH_INF_ENGINE=ON \
-D WITH_QT=OFF \
-D WITH_GTK=ON \
-D WITH_FFMPEG=OFF \
-D CUDA_ARCH_BIN=5.3,6.0,6.1,7.0,7.5 \
-D CUDA_ARCH_PTX=5.3 \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D WITH_TIFF=OFF \
-D WITH_WEBP=OFF \
-D WITH_QT=OFF \
-D WITH_PNG=OFF \
-D WITH_1394=OFF \
-D HAVE_OPENEXR=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_opencv_java=NO \
-D BUILD_opencv_python=NO \
-D BUILD_opencv_python2=NO \
-D BUILD_opencv_python3=NO \
-D BUILD_SHARED_LIBS=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON .. && \
make -j $(nproc --all) && \
sudo make preinstall && sudo make install && sudo ldconfig )
Lassen Sie uns nun überprüfen, wie dies funktionieren wird!Wir klonen uns den Quellcode:git clone https://github.com/Danile71/go_realtime_object_recognition
cd go_realtime_object_recognition
go get -d
go build
./go_realtime_object_recognition
Die Videoerkennung funktioniert auf CPU, VulkanAPI und / oder Cuda.Jetzt habe ich mehrere Pull-Anfragen gestelltgithub.com/hybridgroup/gocv
um OpenVino + Cuda zu unterstützen, aber es ist nicht bekannt, wie lange sie zum Hauptzweig gehen werden, also machen wir einen kleinen Trick:#!/bin/bash
cd $GOPATH/src/gocv.io/x/gocv
wget https://patch-diff.githubusercontent.com/raw/hybridgroup/gocv/pull/607.patch
wget https://patch-diff.githubusercontent.com/raw/hybridgroup/gocv/pull/609.patch
wget https://patch-diff.githubusercontent.com/raw/hybridgroup/gocv/pull/610.patch
wget https://patch-diff.githubusercontent.com/raw/hybridgroup/gocv/pull/612.patch
patch -p1 < 607.patch
patch -p1 < 609.patch
patch -p1 < 610.patch
patch -p1 < 612.patch
Damit können Sie gleichzeitig OpenVino / CPU / VulkanAPI / Cuda verwendengo build -tags openvino
./go_realtime_object_recognition
Und um ein Gerät auszuwählen, ändern Sie- Zentralprozessor
modelNet.SetPreferableBackend(gocv.NetBackendDefault)
modelNet.SetPreferableTarget(gocv.NetTargetCPU)
- VulkanAPI
modelNet.SetPreferableBackend(gocv.NetBackendVKCOM)
modelNet.SetPreferableTarget(gocv.NetTargetVulkan)
- Cuda
modelNet.SetPreferableBackend(gocv.NetBackendCUDA)
modelNet.SetPreferableTarget(gocv.NetTargetCUDA)
- Intel GPU
modelNet.SetPreferableBackend(gocv.NetBackendOpenVINO)
modelNet.SetPreferableTarget(gocv.NetTargetFP16)
- Intel Neural Compute Stick 2
modelNet.SetPreferableBackend(gocv.NetBackendOpenVINO)
modelNet.SetPreferableTarget(gocv.NetTargetVPU)
Hier ist ein weiteres kleines Beispiel mit Geschlechts- / Alters- / Emotionserkennung.Und hier ist die Erkennung des "menschlichen" Objekts mit Cuda.Wenn jemand interessiert ist und etwas nicht geklappt hat, schreibe,ich helfe gerne :-) Chukchi ist kein Schriftsteller, aber ich habe es versucht.upd.Es gibt Zeiten, in denen Sie eine statische Binärdatei erstellen müssen. Ersetzen Sie dazu dldt und opencv in der Assembly-D BUILD_SHARED_LIBS=ON
auf der-D BUILD_SHARED_LIBS=OFF