GoLang و OpenCV (OpenVino && Cuda)

يوم جيد للجميع. هناك بالفعل الكثير من المقالات حول العمل مع OpenCV on Go على المحور ( وفي الواقع على الإنترنت ).

من المؤكد أن الرمز النهائي مثير للاهتمام ، ولكن يجب جمع معلومات أكثر تفصيلاً حول تثبيت برامج التشغيل على شكل قطع - سأحاول دمج جميع الإيماءات الضرورية في مقال واحد.

صورة


لدي كمبيوتر محمول مع Ubuntu 18.04 على متن الطائرة ،

  • وحدة المعالجة المركزية: إنتل
  • مُعالج الرسومات: Intel / Nvidia

تحاول Nvidia و Intel التغلب على بعضهما البعض ، وسأحاول الاستفادة من OpenVino و Cuda في نفس الوقت.
أحذرك على الفور ، لاستخدام Cuda ، تحتاج إلى الحد الأدنى من قدرة الحوسبة (الإصدار) 5.3 ، يمكنك رؤية بطاقة الفيديو الخاصة بك هنا

كودا


لقد اخترت Cuda 10.0 حتى أتمكن من استخدام Tensorflow أيضًا.

تحتاج أولاً إلى تنزيل حزمة باستخدام developer.nvidia.com (مثل الأمر Set time (local) )

صورة

Set

sudo sh cuda_10.0.130_410.48_linux.run


cudNN


ارتباط بالحزم
تحتاج إلى تحديد الإصدار الذي يطابق Cuda ، أي
تنزيل cuDNN v7.5.0 (21 فبراير 2019) لـ CUDA 10.0

صورة

وتحميل حزمتين ديب
مكتبة مطوري cuDNN لـ Ubuntu18.04 (Deb)
مكتبة مطوري cuDNN لـ Ubuntu18.04 (Deb)

إذا لم يكن لديك حساب https://developer.nvidia.com/ ، فستتم مطالبتك بتسجيل

صورة

التثبيت:

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

سائق إنتل OpenCL


رابط المستودع .

التركيب:

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 (بشكل طبيعي مع العكازات) ، والتي ستجمع كل شيء بمفردها .

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 )


الآن دعونا نتحقق من كيفية عمل ذلك!

نحن نستنسخ أنفسنا من شفرة المصدر:

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

يعمل التعرف على الفيديو على وحدة المعالجة المركزية و / أو VulkanAPI و / أو Cuda.

لقد قدمت الآن عدة طلبات سحب
github.com/hybridgroup/gocv

لدعم OpenVino + Cuda ، ولكن من غير المعروف إلى متى سيذهبون إلى الفرع الرئيسي ، لذلك دعونا نقوم ببعض الحيلة:

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

بحيث يمكنك استخدام OpenVino / CPU / VulkanAPI / Cuda في نفس الوقت

go build -tags openvino
./go_realtime_object_recognition

ولتحديد جهاز ، قم بتغييره

  • وحدة المعالجة المركزية

    modelNet.SetPreferableBackend(gocv.NetBackendDefault)
    modelNet.SetPreferableTarget(gocv.NetTargetCPU)
    

  • فولكانابي

    modelNet.SetPreferableBackend(gocv.NetBackendVKCOM)
    modelNet.SetPreferableTarget(gocv.NetTargetVulkan)
    

  • كودا
    modelNet.SetPreferableBackend(gocv.NetBackendCUDA)
    modelNet.SetPreferableTarget(gocv.NetTargetCUDA)
    

  • انتل GPU

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

  • عصا الحوسبة العصبية Intel 2
    modelNet.SetPreferableBackend(gocv.NetBackendOpenVINO)
    modelNet.SetPreferableTarget(gocv.NetTargetVPU)
    


إليك مثال صغير آخر مع التعرف على الجنس / العمر / العاطفة.

و بعد ذلك الاعتراف من وجوه "الإنسان" باستخدام كودا.

إذا المهتمة أي شخص، ولم شيء لم ينجح في مسعاه، الكتابة،

سأكون سعيدا للمساعدة :-) تشوكشي ليس كاتبا، لكنني حاولت.

تحديث.
هناك أوقات تحتاج فيها إلى بناء ثنائي ثابت ؛ لهذا ، استبدل dldt و opencv في التجميع
-D BUILD_SHARED_LIBS=ON

على ال
-D BUILD_SHARED_LIBS=OFF

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


All Articles