# Opencv 4.5.0 & darknet install Windows ## 系統 * 請先確認顯卡的型號與驅動,請依照驅動安裝相對應的 CUDA 、 CUDNN (教學:[連結]( !https://medium.com/ching-i/win10-%E5%AE%89%E8%A3%9D-cuda-cudnn-%E6%95%99%E5%AD%B8-c617b3b76deb) ) * 在 cmd 裡面使用 `nvcc -V` 確認版本 ![](https://i.imgur.com/EiV9y93.png) * 請下載 [cmake-gui](https://cmake.org/download/)並安裝 ,方便之後 compile 使用 * 請下載 [Visual studio](https://visualstudio.microsoft.com/zh-hant/downloads/),這裡使用的版本是 Visual studio 2019 * 需要安裝 python,安裝的時候,需要選擇 "客製化安裝",並且勾選需要的選項 (如下圖) ![](https://i.imgur.com/ShSuNO3.png) ## 安裝 opencv 、 opencv_contrib * [opencv](https://github.com/opencv/opencv) * [opencv_contrib](https://github.com/opencv/opencv_contrib) 透過 `tags` 來選擇下載的版本,這裡以 Opencv 4.5.0 做示範 ![](https://i.imgur.com/PDXpEwL.png) * 下載之後解壓縮 ![](https://i.imgur.com/XfJHsGV.png) ### 安裝步驟 * 請到 opencv-4.5.0 的資料夾下,建立一個叫 `build` 的資料夾 * 打開 cmake-gui,輸入 source code 與 build 資料夾的路徑 ![](https://i.imgur.com/EQoo91k.png) * 點擊 configuration,會出現 compiler 的選項,請選擇正確的編譯器,因為我的 VS為2019 的版本,所以我這裡選 VS2019 ![](https://i.imgur.com/YUtR8qQ.png) * 第一次 compile 會出現錯誤,主要是因為裡面有一些設定需要做的 * CMAKE_INSTALL_PREFIX:Compile 結束後存放 libraries 的路徑 ![](https://i.imgur.com/N1NcF2I.png) * OPENCV_ERTRA_MODULE :使用 Opencv_contrib 提供的 modules ![](https://i.imgur.com/lEmtfoK.png) * OPENCV_ENABLE_NONFREE:設定為 True ![](https://i.imgur.com/cPx6RKk.png) * 要使用 GPU 以下參數要設定為 True ![](https://i.imgur.com/m4HWynl.png) * 將 BUILD_opencv_world:設定為 True ![](https://i.imgur.com/VnrkRcH.png) * 設定好之後,再按一次 Configuration,如果沒有錯誤,會出現 Configration Done!! ![](https://i.imgur.com/YvBHN8o.png) * 接下來按 Generator,Generator 成功會出現 Generator Done ![](https://i.imgur.com/mIe5OgB.png) * 點 Open Project,打 VS 2019 進行編譯 ![](https://i.imgur.com/MaJNOKz.png) * 請確認這裡的組態的模式,將其改為 Release ![](https://i.imgur.com/bBDoCkT.png) * 在方案總管裡面找到 Cmake_target -> ALL_BUILD 點選右鍵 -> 建置 ![](https://i.imgur.com/fbLN170.png) (*建置方案需要一點時間,請耐心等待* ) * 找到 Cmake_target -> INSTALL 點選右鍵 -> 建置 ![](https://i.imgur.com/lQpZYVZ.png) * 編譯完之後會在 `CMAKE_INSTALL_PREFIX` 的路徑下產出下圖的檔案 ![](https://i.imgur.com/ZjiQC7N.png) * 將 x64 -> bin 與 bin 加進環境變數裡面 ### 測試Opencv #### python * 打開 cmd 輸入 `python`,`import cv2`,若是有 import 成功,以及輸出正確版本,就表示安裝成功 ![](https://i.imgur.com/zLidldC.png) #### C++ * 新建一個項目test,並在源文件中添加一個cpp文件,比如:main.cpp; * 打開project -> test Properties * 通用屬性 -> C/C++目錄 ->包含目錄中添加 D:\opencv4.5.0\opencv-4.5.0\build\install\include ![](https://i.imgur.com/IYKgP7E.png) * 連結器 -> 其他程式庫目錄 D:\opencv4.5.0\opencv-4.5.0\build\install\x64\vc16\lib ![](https://i.imgur.com/xCQJ4Dg.png) * 連結器 -> 輸入 -> 其他相依性 D:\opencv4.5.0\opencv-4.5.0\build\install\x64\vc16\lib 裡面的 lib 輸入 *可以寫一個 bat 檔,讓他讀取路徑裡面的檔名* `@echo off dir *.lib /b /on >list.txt` ![](https://i.imgur.com/KIJjFjK.png) * 把 VS 重開,並且執行下段程式,執行成功就代表 OpenCV 安裝成功 #include <opencv2/core.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui.hpp> #include <iostream> using namespace cv; int main() { std::string image_path = samples::findFile("starry_night.jpg"); Mat img = imread(image_path, IMREAD_COLOR); if (img.empty()) { std::cout << "Could not read the image: " << image_path << std::endl; return 1; } imshow("Display window", img); int k = waitKey(0); // Wait for a keystroke in the window if (k == 's') { imwrite("starry_night.png", img); } return 0; } ## 安裝 darknet ### 前置作業 * 將 `C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\extras\visual_studio_integration\MSBuildExtensions` 下有關 CUDA 的四個檔案 ![](https://i.imgur.com/k4f0sKY.png) 複製到 `C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations` 與 `C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140`,如果沒有複製在編譯時可能會找不到 CUDA * 請先到 Github 官網下載 [darknet](https://codeload.github.com/AlexeyAB/darknet/zip/master) 原始碼 * 將先前編譯好的 OpenCV 下 `\build\install\x64\vc16\bin` 的兩個 dll 檔案複製到 `darknet-master\build\darknet\x64` ![](https://i.imgur.com/2NVWemI.png) * 打開 Cmake-GUI ,設定 darknet 的路徑 -> 按下 Configuration ![](https://i.imgur.com/Awp4ILq.png) * 選擇編譯器,我使用的是 VS2019 ![](https://i.imgur.com/OJHk0bQ.png) * 修改以下參數,再按下 Configuration,正確無誤之後會出現 Configuration Done ![](https://i.imgur.com/FoStRAK.png) * 按下 Generator,無誤會出現 Generator Done * 到 `darknet-master\build\darknet\` 的路徑下,打開 darknet.sln。若無GPU,則打開 darknet_no_gpu.sln * 打開之後,請確認組態為 `Release`、`x64` ![](https://i.imgur.com/2GWgonU.png) * 選擇 `ALL_BUILD` -> 右鍵選擇建置 ![](https://i.imgur.com/RsOWvB1.png) * 選擇 `INSTALL` -> 右鍵選擇建置 ![](https://i.imgur.com/TKkQmJt.png) * 建置沒有錯誤就完成了! ### 測試 Darknet * 因為是用 `Release` 編譯,所以將 Release 資料夾裡面的東西複製到 x64 的資料夾 ![](https://i.imgur.com/kYdj8JW.png) * 打開 cmd 切換到 `darknet\build\darknet\x64` 下,並且執行 `darknet.exe detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -ext_output data/dog.jpg`,如果有建置成功,就會出現下圖。 ![](https://i.imgur.com/X7TiQPp.png) --- **Trouble shooting** - 在安裝 VS ,如果遇到 SDK 裝不起來,回傳的 error code 是 1303 - win+R -> regedit -> `Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots` 修改安裝路徑。 - VS2019 在編譯 OpenCV 時,出現 setlocal 的 error,請利用管理員的權限將 `build\OpenCV.sln` 專案開啟