如何在 Ubuntu 19.10 中安裝 Darknet 及 OpenCV 3.4.9

動機:想要玩 Darknet(YOLO),要如何架設呢?!

準備環境
1.Ubuntu 19.10
2.Anaconda 2020.02 for Linux (Python 3.7)
3.Darknet
4.OpenCV 3.4.9
5.CUDA 10.0
6.Geforce RTX 2070 (Notebook)

操作步驟
1.根據 Darknet官網 的指示(參攷1.),可選擇式安裝 OpenCVCUDA
2.根據 OpenCV官網 的指示(參攷2.),如下:
(1).安裝 Packages 指令
$ sudo apt-get install build-essential
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
(2).下載 安裝 Source Code 並解壓縮
$ wget https://github.com/opencv/opencv/archive/3.4.9.tar.gz
$ tar zxvf 3.4.9.tar.gz
$ mv opencv-3.4.9 opencv
$ rm 3.4.9.tar.gz
$ wget https://github.com/opencv/opencv_contrib/archive/3.4.9.tar.gz
$ tar zxvf 3.4.9.tar.gz
$ mv opencv_contrib-3.4.9 opencv_contrib
$ rm 3.4.9.tar.gz
(3).使用 CMake 安裝
cd opencv
$ mkdir build && cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
            -D CMAKE_INSTALL_PREFIX=/usr/local \
            -D OPENCV_GENERATE_PKGCONFIG=ON \
            -D INSTALL_C_EXAMPLES=ON \
            -D INSTALL_PYTHON_EXAMPLES=ON \
            -D OPENCV_EXTRA_MODULES_PATH=/home/user/opencv_contrib/modules \
            -D BUILD_EXAMPLES=ON \
            -D BUILD_DOCS=ON \
            -D WITH_FFMPEG=1 \
            -D WITH_CUDA=ON \
            -D WITH_OPENGL=ON \
            -D WITH_CUBLAS=1 \
            -D WITH_LAPACK=OFF \
            -D CUDA_GENERATION=Auto \
            -D CUDA_ARCH_BIN="7.5" \
            -D CUDA_FAST_MATH=1 \
            -D ENABLE_FAST_MATH=1 \
            -D BUILD_opencv_cudacodec=OFF \
            -D PYTHON_DEFAULT_EXECUTABLE=/home/user/anaconda3/bin/python \
            -D PYTHON3_INCLUDE_DIR=/home/user/anaconda3/include/python3.7m \
            -D PYTHON3_LIBRARY=/home/user/anaconda3/lib/libpython3.7m.so.1.0 \
            -D PYTHON3_PACKAGES_PATH=/home/user/anaconda3/lib/python3.7 \
            -D PYTHON3_NUMPY_INCLUDE_DIRS=/home/davis/anaconda3/lib/python3.7/site-packages/numpy/core/include ..
(*註:上述的 CUDA_ARCH_BIN 請自行查詢 GPU Compute Capabilityhttps://developer.nvidia.com/cuda-gpus 來設定)
如果只是安裝 CPU 版,安裝指令如下
cmake -D CMAKE_BUILD_TYPE=RELEASE \
            -D CMAKE_INSTALL_PREFIX=/usr/local \
            -D OPENCV_GENERATE_PKGCONFIG=ON \
            -D INSTALL_C_EXAMPLES=ON \
            -D INSTALL_PYTHON_EXAMPLES=ON \
            -D OPENCV_EXTRA_MODULES_PATH=/home/user/opencv_contrib/modules \
            -D BUILD_EXAMPLES=ON \
            -D BUILD_DOCS=ON \
            -D WITH_FFMPEG=1 \
            -D WITH_LAPACK=OFF \
            -D ENABLE_FAST_MATH=1 \
            -D PYTHON_DEFAULT_EXECUTABLE=/home/user/anaconda3/bin/python \
            -D PYTHON3_INCLUDE_DIR=/home/user/anaconda3/include/python3.7m \
            -D PYTHON3_LIBRARY=/home/user/anaconda3/lib/libpython3.7m.so.1.0 \
            -D PYTHON3_PACKAGES_PATH=/home/user/anaconda3/lib/python3.7 \
            -D PYTHON3_NUMPY_INCLUDE_DIRS=/home/user/anaconda3/lib/python3.7/site-packages/numpy/core/include ..

如果有遇到 CMake Error錯誤,如下
CMake Error at /usr/local/Cellar/cmake/3.14.3/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake:48 (message):
Could not find compiler set in environment variable CXX:
x86_64-apple-darwin13.4.0-clang++.
Call Stack (most recent call first):
CMakeLists.txt:135 (project)
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!

則下指令( $ export CXX=g++ CC=gcc ) 即可...

(4).編譯 make 使用 threads(考驗 CPU cores)
$ make -j`nproc`
(5).安裝 install
$ sudo make install
(6).測試 OpenCV 是否安裝成功?!
$ python
Python 3.7.6 (default, Jan  8 2020, 19:59:22) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.4.9'
>>> quit()
3.回到 Darknet官網 的說明(參攷1.)...
(1).基本安裝(for CPU)
git clone https://github.com/pjreddie/darknet.git
cd darknet
$ make
(2).測試是否安裝正常?!
$ ./darknet 
usage: ./darknet
(3).修改設定(for GPU)
先修改 Makefile,部分內容摘錄如下:
$ nano Makefile
==================
GPU=1
OPENCV=1
nvcc=/usr/local/cuda-10.0/bin/nvcc
==================
再次編譯
make
(4).測試是否正常?!
./darknet imtest data/eagle.jpg
可以看到老鷹的圖就是正常了!!
$ wget https://pjreddie.com/media/files/alexnet.weights
./darknet -i 0 test data/eagle.jpg cfg/alexnet.cfg alexnet.weights

心得
OpenCV 的安裝越來越方便了,尤其使用 cmake,不像之前的 make 會有一堆問題,筆者曾經遇到有些套件更新或不安裝時需手動修改相關的 make file 及 link.txt...


參攷
1. Installing Darknet, https://pjreddie.com/darknet/install/
2. Installation in Linux, https://docs.opencv.org/3.4/d7/d9f/tutorial_linux_install.html

留言