? 歡迎關注我的公眾號 [極智視界],回復001獲取Google編程規范
? O_o ? >_< ? o_O ? O_o ? ~_~ ? o_O
? 本教程詳細記錄了在 win10 環境中使用 qmake 構建 ncnn vs 工程的方法,
文章目錄
- 1、準備 opencv
- 2、編譯 protobuf
- 3、編譯 ncnn
- 4、vs2017 構建 ncnn
1、準備 opencv
? windows 上想要使用 opencv 很簡單,opencv 官網提供了編譯好的 windows 版本的庫可以直接拿來用,
? 傳送門:https://opencv.org/releases/
? 當然也可以選擇原始碼編譯 opencv,可以參考《【經驗分享】windows 原始碼編譯 opencv》,
2、編譯 protobuf
? 注意要用 vs2017 自帶的終端 - 適用于 VS2017 的 X64 本機工具命令提示,

? 下載 protobuf-3.4.0,傳送:https://github.com/google/protobuf/archive/v3.4.0.zip
? 編譯 protobuf:
cd <protobuf-root-dir>
mkdir build
cd build
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat" amd64
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake
nmake
nmake install
? 編譯完會在 build/install 下生成如下目錄結構:

3、編譯 ncnn
? clone ncnn 工程:
git clone --recursive https://github.com/Tencent/ncnn.git
? 編譯 ncnn,其中 為上面下載的 protobuf 原始碼包路徑:
cd <ncnn-root-dir>
mkdir -p build
cd build
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat" amd64
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -DProtobuf_INCLUDE_DIR=<protobuf-root-dir>/build/install/include -DProtobuf_LIBRARIES=<protobuf-root-dir>/build/install/lib/libprotobuf.lib -DProtobuf_PROTOC_EXECUTABLE=<protobuf-root-dir>/build/install/bin/protoc.exe -DNCNN_VULKAN=OFF ..
nmake
nmake install
? 編譯完成后會在 build/install 下生成如下目錄結構:

? 且在 build/src 下會生成一些 .h 和 .cpp,會用于后面構建工程,以上就完成了 vs2017 構建 ncnn windows 版本庫依賴的編譯,下面進入 vs2017 構建,
4、vs2017 構建 ncnn
? 我這里使用 qmake 來構建 vs 工程,qmake 的 ncnn.pro 如下,從 pro 里可以看到構建 ncnn 工程時,會將前面的 opencv、protobuf、ncnn 編譯出來的檔案作為三方庫了,
# ncnn.pro
TEMPLATE = app
CONFIG += console debug_and_release warn_on c++11
QT -= gui
win32 {
QMAKE_CXXFLAGS += /MP /utf-8
}
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE += $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
Debug:{
TARGET = ncnn
DESTDIR = ./build/debug
TEMP_DESTDIR = ./build/intermediate/debug/$$TARGET
}
Release:{
TARGET = ncnn
DESTDIR = ./build/release
TEMP_DESTDIR = ./build/intermediate/release/$$TARGET
}
MOC_DIR = $$TEMP_DESTDIR/moc
RCC_DIR = $$TEMP_DESTDIR/rcc
UI_DIR = $$TEMP_DESTDIR/qui
OBJECTS_DIR = $$TEMP_DESTDIR/obj
win32 {
LIBS += -L./3rdparty/protobuf/lib/ libprotobuf.lib libprotobuf-lite.lib libprotoc.lib
CONFIG(debug,debug|release){
LIBS += \
-L./3rdparty/opencv/x64/vc15/lib opencv_imgprocd.lib opencv_imgcodecsd.lib opencv_cored.lib opencv_dnnd.lib
}
CONFIG(release,debug|release){
LIBS += \
-L./3rdparty/opencv/x64/vc15/lib opencv_imgproc.lib opencv_imgcodecs.lib opencv_core.lib opencv_dnn.lib
}
}
win32 {
INCLUDEPATH += \
./3rdparty/opencv/include \
./3rdparty/protobuf/include/google/protobuf \
./3rdparty/ncnn/include/ncnn \
./3rdparty/ncnn/src \
./3rdparty/ncnn/src/layer/x86
}
HEADERS += ./src/xxx.cpp \
SOURCES += ./src/xxx.h \
#CUDA_SOURCES += \
win32 {
SYSTEM_NAME = x64
SYSTEM_TYPE = 64
CUDA_ARCH = compute_35
CUDA_CODE = sm_35
CUDA_INC = $$join(INCLUDEPATH,'" -I"','-I"','"')
MSVCRT_LINK_FLAG_DEBUG = "/MDd"
MSVCRT_LINK_FLAG_RELEASE = "/MD"
# Configuration of the Cuda compiler
CONFIG(debug, debug|release) {
# Debug mode
cuda.input = CUDA_SOURCES
cuda.output = $$OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.obj
cuda.commands = $$PWD/./3rdparty/cuda/bin/nvcc.exe -D_DEBUG -Xcompiler $$MSVCRT_LINK_FLAG_DEBUG -c -Xcompiler $$join(QMAKE_CXXFLAGS,",") $$join(INCLUDEPATH,'" -I "','-I "','"') ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT}
QMAKE_EXTRA_COMPILERS += cuda
} else {
# Release mode
cuda.input = CUDA_SOURCES
cuda.output = $$OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.obj
cuda.commands = $$PWD/./3rdparty/cuda/bin/nvcc.exe -Xcompiler $$MSVCRT_LINK_FLAG_RELEASE -c -Xcompiler $$join(QMAKE_CXXFLAGS,",") $$join(INCLUDEPATH,'" -I "','-I "','"') ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT}
QMAKE_EXTRA_COMPILERS += cuda
}
}
? 再構建一個 create_vs_pro.bat:
# create_vs_pro.bat
set PRO_FILE=ncnn.pro
set VC_DIR=C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build
call "%VC_DIR%\vcvars64.bat"
set QT_5_9_8=C:\Qt\Qt5.9.8\5.9.8\msvc2015_64\bin
set OPENCV_4_3_0=.\3rdparty\opencv\x64\vc15\bin
set CUDA_11_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin
SET "PATH=%OPENCV_4_3_0%;%CUDA_11_0%;%PATH%"
qmake -r -tp vc %PRO_FILE%
pause
? 雙擊 create_vs_pro.bat 就能生成 ncnn.sln,然后就可以進 vs studio 進行編譯除錯了,

? 需要注意的是,我這里是沒有把 examples、tools、tests、benchmark 里大量的實用工具做成獨立工程的形式,這些用到的時候再單獨加到工程的 source 里就可以了,
? 其實 qmake 編譯那塊還有些細坑沒寫,琢磨一下應該能解決,若有問題歡迎聯系我,希望我的分享能對你有一點幫助,
?【公眾號傳送】
《【經驗分享】win10 qmake 構建 ncnn vs 工程》
掃描下方二維碼即可關注我的微信公眾號【極智視界】,獲取更多AI經驗分享,讓我們用極致+極客的心態來迎接AI !

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/349750.html
標籤:其他
上一篇:OpenCV-Python教程:統計函式~L1、L2、無窮范數、漢明范數(norm,NORM_HAMMING2,NORM_HAMMING)
