# Opencv 4.4.0 & Opencv_contrib compile 與 Darknet 編譯 ## 系統 * Linux * 透過 jupyter notebook terminal 安裝 ## Opencv install ``` sudo apt-get install cmake sudo apt-get install gcc g++ sudo apt-get install build-essential sudo apt-get install libgtk-3-dev sudo apt-get install libpng-dev sudo apt-get install libjpeg-dev sudo apt-get install libopenexr-dev sudo apt-get install libtiff-dev sudo apt-get install libopencv-dev sudo apt-get install libavcodec-dev sudo apt-get install libavformat-dev sudo apt-get install libjpeg-dev sudo apt-get install libswscale-dev sudo apt-get install libtiff5-dev sudo apt-get install libgtk2.0-dev sudo apt-get install pkg-config ``` 1. 切換目錄至 /opt/ 下面,在 TWCC 要把 opencv 放在這邊,才不會出現 `The source directory xxx does not exist` 的 Error 發生 2. 從git clone opencv、opencv_contrib,並且利用 git checkout 指定要安裝的版本。 3. 切換到 opencv 的目錄下 `cd opencv` * 建立要 compile 的資料夾 (build),與所有的 library 存放的資料夾 (target_install),通常都在 `/usr/local` * 並且切換到 build 的資加夾 `mkdir build` `cd build` 4. 利用 cmake 來設定 compile 時所需要的參數,指令如下,還有很多的參數,如果沒有特別設定,就是使用 CMakeFileList.txt 的預設。 * `-DCMAKE_INSTALL_PREFIX`,這是要設定 library 存放資料夾的路徑,就是上面提到的 target_install * `-DOPENCV_EXTRA_MODULES_PATH`是如果有需要其他額外的 modules,這裡的路徑就是要設定 `opencv_contrib/modules` ``` cmake -DCMAKE_BUILD_TYPE=DEBUG \ -DCMAKE_INSTALL_PREFIX=/usr/local/ \ -DINSTALL_C_EXAMPLES=OFF \ -DINSTALL_PYTHON_EXAMPLES=ON \ -DOPENCV_EXTRA_MODULES_PATH=/opt/opencv_contrib/modules \ -DOPENCV_ENABLE_NONFREE=ON \ -DBUILD_opencv_python3=ON \ -DOPENCV_GENERATE_PKGCONFIG=ON \ -DWITH_TBB=ON \ -DENABLE_FAST_MATH=1 \ -DWITH_CUBLAS=1 \ -DWITH_CUDA=ON \ -DBUILD_opencv_cudacodec=OFF \ -DWITH_CUDNN=ON \ -DOPENCV_DNN_CUDA=ON \ -DWITH_FFMPEG=ON \ -DWITH_OPENGL=ON .. ``` 5. 如果 cmake 沒有問題,就可以下 `make -j8` ,開始進行 libraries compile. 6. 接下來 sudo make install 7. 安裝完之後,需要確定 `/usr/local/lib/pkgconfig` 是否有 opencv4.pc 這個檔案 8. 如果 target_install ,不是 `/usr/local/`,需要進行下面的步驟,切換到 `/target_install/lib/pkgconfig`,將編譯好的 `config file` 複製到 `/usr/local/lib/pkgconfig` ``` cd /target_install/lib/pkgconfig sudo cp opencv4.pc /usr/local/lib/pkgconfig ``` 9. 編輯系統檔,要設定系統變數,讓 opencv 可以順利被 Link 到 ``` #修改bash.bashrc文件 sudo vim /etc/bash.bashrc # 在最后加入: PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH # 新增PYTHONPATH環境變數 export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.8/dist-packages #退出編輯 source /etc/bash.bashrc ``` 10. 將編譯好適合 python 的 opencv libraries,複製到系統的 python 下,讓 jupyter notebook 可以順利 import ``` sudo cp -r /target_install/lib/python3.8/dist-packages/* /usr/local/lib/python3.8/dist-packages ``` ``` sudo cp -r /target_install/lib/python3.8/site-pachages/* .local/lib/python3.8/site-pachages/ ``` 11. 接下來 `sudo ldconfig` 這個指令是要建立所有的 libraries 的 Link 12. 在 Update `sudo apt-get update`,將所有的 Link 更新 13. 測試以下程式碼,如果有印出正確的版本號,就代表安裝成功 ``` import cv2 print(cv2.__version__) ``` ## Darknet 1. 先到 Github 下在原始碼 `git clone https://github.com/AlexeyAB/darknet.git` 2. 切換到 darknet 目錄下 `cd darknet` 3. 修改 Makefile,`sudo vim Makefile` * 在 Makefile 中會看到以下參數 ``` GPU=0 CUDNN=0 CUDNN_HALF=0 OPENCV=0 AVX=0 OPENMP=0 LIBSO=0 ZED_CAMERA=0 ZED_CAMERA_v2_8=0 ``` 將參數修改如下: ``` GPU=1 CUDNN=1 CUDNN_HALF=1 OPENCV=1 AVX=0 OPENMP=0 LIBSO=1 ZED_CAMERA=0 ZED_CAMERA_v2_8=0 ``` 4. 如果系統有不同的多個 cuda 版本,需要特別注意 Makefile 裡面這段的 cuda 路徑 ![](https://i.imgur.com/U63ipEe.png) 5. 改好之後執行 `sudo make` 6. 重新編譯之後,就會在這個目錄下生成新的 `darknet` 檔案,在訓練與預測就是要使用這個檔案 ** Trouble shooting ** 1. nvcc: not found make: ***[obj/convolutional_kernels.o],[解決方法](https://blog.csdn.net/qq_33869371/article/details/89260056)