GoLang dan OpenCV (OpenVino && Cuda)

Hari baik untuk semua Sudah ada banyak artikel tentang bekerja dengan OpenCV on Go on the hub ( dan memang di Internet ).

Kode yang sudah selesai tentu menarik, tetapi informasi yang lebih terperinci tentang cara menginstal driver harus dikumpulkan dalam beberapa bagian - saya akan mencoba menggabungkan semua gerakan yang diperlukan menjadi satu artikel.

gambar


Saya punya laptop dengan Ubuntu 18.04 on board,

  • CPU: Intel
  • GPU: Intel / Nvidia

Nvidia dan Intel berusaha untuk saling mengalahkan, dan saya akan mencoba memanfaatkan OpenVino dan Cuda pada saat yang bersamaan.
Saya segera memperingatkan Anda, untuk menggunakan Cuda Anda memerlukan kemampuan Compute minimum (versi) 5.3, Anda dapat melihat untuk kartu video Anda di sini

Cuda


Saya memilih Cuda 10.0 sehingga saya bisa menggunakan Tensorflow juga.

Pertama, Anda perlu men-download paket dengan developer.nvidia.com (seperti runtime (lokal) )

gambar

Set perintah

sudo sh cuda_10.0.130_410.48_linux.run


tidak bisa


Tautan ke paket.
Anda harus memilih versi yang cocok dengan Cuda, yaitu
Unduh cuDNN v7.5.0 (21 Feb 2019), untuk CUDA 10.0

gambar

Dan unduh dua paket deb
Perpustakaan Pengembang cuDNN untuk Ubuntu18.04 (Deb)
Perpustakaan Pengembang cuDNN untuk Ubuntu18.04 (Deb)

Jika Anda tidak memiliki akun https://developer.nvidia.com/ , Anda akan diminta untuk mendaftar

gambar

Instalasi:

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 Driver


Tautan ke repositori .

Instalasi:

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 + OpenVino

Script (secara alami dengan kruk), yang akan mengumpulkan semuanya dengan sendirinya.

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"

# install opencv
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 )


Sekarang mari kita periksa bagaimana ini akan berhasil!

Kami mengkloning sendiri kode sumber:

git clone https://github.com/Danile71/go_realtime_object_recognition
cd go_realtime_object_recognition
go get -d
go build
./go_realtime_object_recognition

Pengenalan video akan bekerja pada CPU, VulkanAPI dan / atau Cuda.

Sekarang saya telah membuat beberapa permintaan tarik
github.com/hybridgroup/gocv

untuk mendukung OpenVino + Cuda, tetapi tidak diketahui berapa lama mereka akan pergi ke cabang master, jadi mari kita lakukan sedikit trik:

#!/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

Sehingga Anda dapat menggunakan OpenVino / CPU / VulkanAPI / Cuda secara bersamaan

go build -tags openvino
./go_realtime_object_recognition

Dan untuk memilih perangkat, ubah

  • CPU

    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)
    

  • GPU Intel

    modelNet.SetPreferableBackend(gocv.NetBackendOpenVINO)
    modelNet.SetPreferableTarget(gocv.NetTargetFP16)
    

  • Intel Neural Compute Stick 2
    modelNet.SetPreferableBackend(gocv.NetBackendOpenVINO)
    modelNet.SetPreferableTarget(gocv.NetTargetVPU)
    


Berikut contoh kecil lainnya dengan pengenalan gender / usia / emosi.

Dan kemudian pengakuan objek "orang" menggunakan Cuda.

Jika ada yang tertarik, dan sesuatu tidak berhasil, tulis,

saya akan dengan senang hati membantu :-) Chukchi bukan seorang penulis, tetapi saya mencoba.

upd.
Ada saat-saat ketika Anda perlu membuat biner statis, untuk ini, ganti dldt dan opencv di majelis
-D BUILD_SHARED_LIBS=ON

di
-D BUILD_SHARED_LIBS=OFF

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


All Articles