diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e0bfbda5..783130766 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,7 +49,7 @@ if(ANDROID) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g0 -Os -ffunction-sections -fdata-sections") endif() -#############################CMAKE FOR FASTDEPLOY################################ +############################# Basic Options for FastDeploy ################################ option(ENABLE_PADDLE_FRONTEND "Whether to enable PaddlePaddle frontend to support load paddle model in fastdeploy." ON) option(WITH_GPU "Whether WITH_GPU=ON, will enable onnxruntime-gpu/paddle-infernce-gpu" OFF) option(ENABLE_ORT_BACKEND "Whether to enable onnxruntime backend." OFF) @@ -61,7 +61,7 @@ option(ENABLE_VISION "Whether to enable vision models usage." OFF) option(ENABLE_VISION_VISUALIZE "Whether to enable visualize vision model result toolbox." ON) option(ENABLE_TEXT "Whether to enable text models usage." OFF) option(WITH_TESTING "Whether to compile with unittest." OFF) -######################### Options for Android cross compiling #################### +############################# Options for Android cross compiling ######################### option(WITH_OPENCV_STATIC "Use OpenCV static lib for Android." OFF) option(WITH_LITE_STATIC "Use Paddle Lite static lib for Android." OFF) option(WITH_LITE_FULL_API "Use Paddle Lite full API lib for Android." ON) @@ -156,6 +156,7 @@ if(ANDROID OR IOS) endif() endif() +##################################### Buiding: FastDeploy C++ SDK ####################################### add_definitions(-DFASTDEPLOY_LIB) # configure files before glob sources. configure_file(${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/core/config.h.in ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/core/config.h) @@ -408,6 +409,8 @@ endif() include(${PROJECT_SOURCE_DIR}/cmake/summary.cmake) fastdeploy_summary() + +################################ Installation: FastDeploy C++ SDK ############################### if(WIN32) install( TARGETS ${LIBRARY_NAME} @@ -437,6 +440,20 @@ install( DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs ) + +if(WIN32 AND BUILD_EXAMPLES) + get_windows_path(_tmp_install_dir ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install) + get_windows_path(_publish_exe_dir ${EXECUTABLE_OUTPUT_PATH}/Release) + list(GET CMAKE_CONFIGURATION_TYPES 0 _CONFIG_TYPE) + if((${CMAKE_BUILD_TYPE} MATCHES "Release") OR (${_CONFIG_TYPE} MATCHES "Release")) + install(TARGETS ${LIBRARY_NAME} RUNTIME DESTINATION ${EXECUTABLE_OUTPUT_PATH}/Release) + add_custom_target( + copy_fd_third_dlls_examples ALL COMMAND + cmd /C ${PROJECT_SOURCE_DIR}/scripts/fastdeploy_init.bat install ${_tmp_install_dir} ${_publish_exe_dir} noconfirm) + add_dependencies(copy_fd_third_dlls_examples ${LIBRARY_NAME} copy_yaml_library) + endif() +endif() + install( FILES ${PROJECT_SOURCE_DIR}/LICENSE @@ -447,17 +464,25 @@ install( ${PROJECT_SOURCE_DIR}/cmake/utils.cmake DESTINATION ${CMAKE_INSTALL_PREFIX} ) + install( DIRECTORY ${PROJECT_SOURCE_DIR}/examples DESTINATION ${CMAKE_INSTALL_PREFIX} ) + if(NOT WIN32) install( FILES ${PROJECT_SOURCE_DIR}/scripts/fastdeploy_init.sh DESTINATION ${CMAKE_INSTALL_PREFIX} ) +else() + install( + FILES ${PROJECT_SOURCE_DIR}/scripts/fastdeploy_init.bat + DESTINATION ${CMAKE_INSTALL_PREFIX} + ) endif() +############################### Building: FastDeploy Python Wheel ############################# if(BUILD_FASTDEPLOY_PYTHON) add_definitions(-DBUILD_FASTDEPLOY_PYTHON) if("${PY_EXT_SUFFIX}" STREQUAL "") diff --git a/FastDeploy.cmake.in b/FastDeploy.cmake.in index c59191198..5943b3097 100644 --- a/FastDeploy.cmake.in +++ b/FastDeploy.cmake.in @@ -76,10 +76,11 @@ endif() if(ENABLE_OPENVINO_BACKEND) if (OPENVINO_DIRECTORY) - get_openvino_libs(${OPENVINO_DIRECTORY}/runtime) + set(OPENVINO_DIR ${OPENVINO_DIRECTORY}) else() - get_openvino_libs(${CMAKE_CURRENT_LIST_DIR}/third_libs/install/${OPENVINO_FILENAME}/runtime) + set(OPENVINO_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/${OPENVINO_FILENAME}/runtime) endif() + get_openvino_libs(${OPENVINO_DIR}) message(STATUS "OPENVINO_LIBS = ${OPENVINO_LIBS}") list(APPEND FASTDEPLOY_LIBS ${OPENVINO_LIBS}) endif() @@ -141,8 +142,8 @@ if(ENABLE_VISION) set(OpenCV_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/${OPENCV_FILENAME}/sdk/native/jni) else() set(OpenCV_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/${OPENCV_FILENAME}) - if (WIN32) - set(OpenCV_DIR ${OpenCV_DIR}/build/) + if(WIN32) + set(OpenCV_DIR ${OpenCV_DIR}/build) endif() endif() endif() @@ -255,9 +256,6 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") endif() endif() -# ------------------------------------------------------------------------------- # -# Usage: install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}/Release) # -# ------------------------------------------------------------------------------- # function(install_fastdeploy_libraries DESTINATION_DIR) set(DYN_LIB_SUFFIX "*.so*") if(WIN32) @@ -266,12 +264,13 @@ function(install_fastdeploy_libraries DESTINATION_DIR) set(DYN_LIB_SUFFIX "*.dylib*") endif() if(FastDeploy_DIR) - file(GLOB_RECURSE ALL_NEED_DYN_LIBS ${FastDeploy_DIR}/${DYN_LIB_SUFFIX}) + set(DYN_SEARCH_DIR ${FastDeploy_DIR}) elseif(FASTDEPLOY_INSTALL_DIR) - file(GLOB_RECURSE ALL_NEED_DYN_LIBS ${FASTDEPLOY_INSTALL_DIR}/${DYN_LIB_SUFFIX}) + set(DYN_SEARCH_DIR ${FASTDEPLOY_INSTALL_DIR}) else() message(FATAL_ERROR "Please set FastDeploy_DIR/FASTDEPLOY_INSTALL_DIR before call install_fastdeploy_libraries.") endif() + file(GLOB_RECURSE ALL_NEED_DYN_LIBS ${DYN_SEARCH_DIR}/${DYN_LIB_SUFFIX}) if(ENABLE_VISION) file(GLOB_RECURSE ALL_OPENCV_DYN_LIBS ${OpenCV_DIR}/${DYN_LIB_SUFFIX}) list(REMOVE_ITEM ALL_NEED_DYN_LIBS ${ALL_OPENCV_DYN_LIBS}) @@ -287,6 +286,12 @@ function(install_fastdeploy_libraries DESTINATION_DIR) file(INSTALL ${OPENCV_DYN_LIBS} DESTINATION ${DESTINATION_DIR}) endif() endif() + if(ENABLE_OPENVINO_BACKEND) + # need plugins.xml for openvino backend + set(OPENVINO_RUNTIME_BIN_DIR ${OPENVINO_DIR}/bin) + file(GLOB OPENVINO_PLUGIN_XML ${OPENVINO_RUNTIME_BIN_DIR}/*.xml) + file(INSTALL ${OPENVINO_PLUGIN_XML} DESTINATION ${DESTINATION_DIR}) + endif() # Install other libraries file(INSTALL ${ALL_NEED_DYN_LIBS} DESTINATION ${DESTINATION_DIR}) endfunction() diff --git a/cmake/opencv.cmake b/cmake/opencv.cmake index 866e1df28..7557e682c 100644 --- a/cmake/opencv.cmake +++ b/cmake/opencv.cmake @@ -180,9 +180,9 @@ else() endif() file(RENAME ${THIRD_PARTY_PATH}/install/${OPENCV_FILENAME}/ ${THIRD_PARTY_PATH}/install/opencv) set(OPENCV_FILENAME opencv) - set(OpenCV_DIR ${THIRD_PARTY_PATH}/install/${OPENCV_FILENAME}/) + set(OpenCV_DIR ${THIRD_PARTY_PATH}/install/${OPENCV_FILENAME}) if (WIN32) - set(OpenCV_DIR ${OpenCV_DIR}/build/) + set(OpenCV_DIR ${OpenCV_DIR}/build) endif() find_package(OpenCV REQUIRED PATHS ${OpenCV_DIR}) include_directories(${OpenCV_INCLUDE_DIRS}) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 71074d160..ffbc72317 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -58,3 +58,8 @@ function(remove_duplicate_libraries libraries) endforeach() set(${libraries} ${full_libraries} PARENT_SCOPE) endfunction() + +function(get_windows_path win_path origin_path) + STRING(REGEX REPLACE "/" "\\\\" _win_path ${origin_path}) + set(${win_path} ${_win_path} PARENT_SCOPE) +endfunction() diff --git a/docs/compile/how_to_use_sdk_on_windows.md b/docs/compile/how_to_use_sdk_on_windows.md index c19ff6e2c..7e500c69a 100644 --- a/docs/compile/how_to_use_sdk_on_windows.md +++ b/docs/compile/how_to_use_sdk_on_windows.md @@ -5,29 +5,33 @@ - 2. 根据开发环境,下载预编译部署库和samples代码,参考[FastDeploy预编译库](../quick_start) ## 目录 -- [环境依赖](#Environment) -- [下载 FastDeploy Windows 10 C++ SDK](#Download) -- [Windows下多种方式使用 C++ SDK 的方式](#CommandLine) - - [方式一:命令行方式使用 C++ SDK](#CommandLine) - - [步骤一:在 Windows 命令行终端 上编译 example](#CommandLine) - - [步骤二:运行可执行文件获得推理结果](#CommandLine) - - [方式二:Visual Studio 2019 创建sln工程使用 C++ SDK](#VisualStudio2019Sln) - - [步骤一:Visual Studio 2019 创建 sln 工程项目](#VisualStudio2019Sln1) - - [步骤二:从examples中拷贝infer_ppyoloe.cc的代码到工程](#VisualStudio2019Sln2) - - [步骤三:将工程配置设置成"Release x64"配置](#VisualStudio2019Sln3) - - [步骤四:配置头文件include路径](#VisualStudio2019Sln4) - - [步骤五:配置lib路径和添加库文件](#VisualStudio2019Sln5) - - [步骤六:编译工程并运行获取结果](#VisualStudio2019Sln6) - - [方式三:Visual Studio 2019 创建CMake工程使用 C++ SDK](#VisualStudio2019) - - [步骤一:Visual Studio 2019 创建CMake工程项目](#VisualStudio20191) - - [步骤二:在CMakeLists中配置 FastDeploy C++ SDK](#VisualStudio20192) - - [步骤三:生成工程缓存并修改CMakeSetting.json配置](#VisualStudio20193) - - [步骤四:生成可执行文件,运行获取结果](#VisualStudio20194) - - [方式四:CLion IDE 方式使用 C++ SDK](#VisualStudioCode) -- [多种方法配置exe运行时所需的依赖库](#CommandLineDeps1) - - [方式一:修改CMakeLists.txt,一行命令配置(推荐)](#CommandLineDeps1) - - [方式二:命令行设置环境变量](#CommandLineDeps2) - - [方法三:手动拷贝依赖库到exe的目录下](#CommandLineDeps3) +- [1. 环境依赖](#Environment) +- [2. 下载 FastDeploy Windows 10 C++ SDK](#Download) +- [3. Windows下多种方式使用 C++ SDK 的方式](#CommandLine) + - [3.1 命令行方式使用 C++ SDK](#CommandLine) + - [3.1.1 在 Windows 命令行终端 上编译 example](#CommandLine) + - [3.1.2 运行可执行文件获得推理结果](#CommandLine) + - [3.2 Visual Studio 2019 创建sln工程使用 C++ SDK](#VisualStudio2019Sln) + - [3.2.1 Visual Studio 2019 创建 sln 工程项目](#VisualStudio2019Sln1) + - [3.2.2 从examples中拷贝infer_ppyoloe.cc的代码到工程](#VisualStudio2019Sln2) + - [3.2.3 将工程配置设置成"Release x64"配置](#VisualStudio2019Sln3) + - [3.2.4 配置头文件include路径](#VisualStudio2019Sln4) + - [3.2.5 配置lib路径和添加库文件](#VisualStudio2019Sln5) + - [3.2.6 编译工程并运行获取结果](#VisualStudio2019Sln6) + - [3.3 Visual Studio 2019 创建CMake工程使用 C++ SDK](#VisualStudio2019) + - [3.3.1 Visual Studio 2019 创建CMake工程项目](#VisualStudio20191) + - [3.3.2 在CMakeLists中配置 FastDeploy C++ SDK](#VisualStudio20192) + - [3.3.3 生成工程缓存并修改CMakeSetting.json配置](#VisualStudio20193) + - [3.3.4 生成可执行文件,运行获取结果](#VisualStudio20194) +- [4. 多种方法配置exe运行时所需的依赖库](#CommandLineDeps1) + - [4.1 使用 fastdeploy_init.bat 进行配置(推荐)](#CommandLineDeps1) + - [4.1.1 fastdeploy_init.bat 使用说明](#CommandLineDeps11) + - [4.1.2 fastdeploy_init.bat 查看 SDK 中所有的 dll、lib 和 include 路径](#CommandLineDeps12) + - [4.1.3 fastdeploy_init.bat 安装 SDK 中所有的 dll 到指定的目录](#CommandLineDeps13) + - [4.1.4 fastdeploy_init.bat 配置 SDK 环境变量](#CommandLineDeps14) + - [4.2 修改 CMakeLists.txt,一行命令配置(推荐)](#CommandLineDeps2) + - [4.3 命令行设置环境变量](#CommandLineDeps3) + - [4.4 手动拷贝依赖库到exe的目录下](#CommandLineDeps4) ## 1. 环境依赖 @@ -41,21 +45,24 @@ ## 2. 下载 FastDeploy Windows 10 C++ SDK
+### 2.1 下载预编译库或者从源码编译最新的SDK 可以从以下链接下载编译好的 FastDeploy Windows 10 C++ SDK,SDK中包含了examples代码。 ```text https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-win-x64-gpu-0.2.1.zip ``` -## 3. 准备模型文件和测试图片 +源码编译请参考: [Windows C++ SDK源码编译文档](./how_to_build_windows.md) +### 2.2 准备模型文件和测试图片 可以从以下链接下载模型文件和测试图片,并解压缩 ```text https://bj.bcebos.com/paddlehub/fastdeploy/ppyoloe_crn_l_300e_coco.tgz # (下载后解压缩) https://gitee.com/paddlepaddle/PaddleDetection/raw/release/2.4/demo/000000014439.jpg ``` -## 4. SDK使用方式一:命令行方式使用 C++ SDK +## 3. Windows下多种方式使用 C++ SDK 的方式 +### 3.1 SDK使用方式一:命令行方式使用 C++ SDK -### 4.1 在 Windows 上编译 PPYOLOE +#### 3.1.1 在 Windows 上编译 PPYOLOE Windows菜单打开`x64 Native Tools Command Prompt for VS 2019`命令工具,cd到ppyoloe的demo路径 ```bat cd fastdeploy-win-x64-gpu-0.2.1\examples\vision\detection\paddledetection\cpp @@ -69,7 +76,7 @@ cmake .. -G "Visual Studio 16 2019" -A x64 -DFASTDEPLOY_INSTALL_DIR=%cd%\..\..\. msbuild infer_demo.sln /m:4 /p:Configuration=Release /p:Platform=x64 ``` -### 4.2 运行 demo +#### 3.1.2 运行 demo ```bat cd Release infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 0 # CPU @@ -79,13 +86,13 @@ infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 2 # GPU + Tenso 特别说明,exe运行时所需要的依赖库配置方法,请参考章节: [多种方法配置exe运行时所需的依赖库](#CommandLineDeps) -## 5. SDK使用方式二:Visual Studio 2019 创建 sln 工程使用 C++ SDK +### 3.2 SDK使用方式二:Visual Studio 2019 创建 sln 工程使用 C++ SDK 本章节针对非CMake用户,介绍如何在Visual Studio 2019 中创建 sln 工程使用 FastDeploy C++ SDK. CMake用户请直接看下一章节。另外,本章节内容特别感谢“梦醒南天”同学关于FastDeploy使用的文档教程:[如何在 Windows 上使用 FastDeploy C++ 部署 PaddleDetection 目标检测模型](https://www.bilibili.com/read/cv18807232) -### 5.1 步骤一:Visual Studio 2019 创建 sln 工程项目 +#### 3.2.1 步骤一:Visual Studio 2019 创建 sln 工程项目 @@ -99,7 +106,7 @@ infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 2 # GPU + Tenso  -### 5.2 步骤二:从examples中拷贝infer_ppyoloe.cc的代码到工程 +#### 3.2.2 步骤二:从examples中拷贝infer_ppyoloe.cc的代码到工程 @@ -110,13 +117,13 @@ fastdeploy-win-x64-gpu-0.2.1\examples\vision\detection\paddledetection\cpp  -### 5.3 步骤三:将工程配置设置成"Release x64"配置 +#### 3.2.3 步骤三:将工程配置设置成"Release x64"配置  -### 5.4 步骤四:配置头文件include路径 +#### 3.2.4 步骤四:配置头文件include路径 @@ -133,7 +140,7 @@ fastdeploy-win-x64-gpu-0.2.1\examples\vision\detection\paddledetection\cpp D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\include D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\install\opencv-win-x64-3.4.16\build\include ``` -注意,如果是自行编译最新的SDK或版本>0.2.1,依赖库目录结构有所变动,opencv路径需要做出适当的修改。如: +注意,如果是自行编译最新的SDK或版本>0.2.1,依赖库目录结构有所变动,opencv路径需要做出适当的修改。如: ```bat D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\install\opencv\build\include ``` @@ -143,7 +150,7 @@ D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\inst 用户需要根据自己实际的sdk路径稍作修改。 -### 5.5 步骤五:配置lib路径和添加库文件 +#### 3.2.5 步骤五:配置lib路径和添加库文件 @@ -151,8 +158,8 @@ D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\inst ```bat D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\lib D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\install\opencv-win-x64-3.4.16\build\x64\vc15\lib -``` -注意,如果是自行编译最新的SDK或版本>0.2.1,依赖库目录结构有所变动,opencv路径需要做出适当的修改。如: +``` +注意,如果是自行编译最新的SDK或版本>0.2.1,依赖库目录结构有所变动,opencv路径需要做出适当的修改。如: ```bat D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\install\opencv\build\include ``` @@ -163,7 +170,7 @@ D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\inst  -### 5.6 步骤六:编译工程并运行获取结果 +#### 3.2.6 步骤六:编译工程并运行获取结果 @@ -184,12 +191,12 @@ D:\qiuyanjun\fastdeploy_test\infer_ppyoloe\x64\Release\infer_ppyoloe.exe  -## 6. SDK使用方式三:Visual Studio 2019 创建 CMake 工程使用 C++ SDK +### 3.3 SDK使用方式三:Visual Studio 2019 创建 CMake 工程使用 C++ SDK 本章节针对CMake用户,介绍如何在Visual Studio 2019 中创建 CMake 工程使用 FastDeploy C++ SDK. -### 6.1 步骤一:Visual Studio 2019 创建“CMake”工程项目 +#### 3.3.1 步骤一:Visual Studio 2019 创建“CMake”工程项目 @@ -206,7 +213,7 @@ D:\qiuyanjun\fastdeploy_test\infer_ppyoloe\x64\Release\infer_ppyoloe.exe  -### 6.2 步骤二:在CMakeLists中配置 FastDeploy C++ SDK +#### 3.3.2 步骤二:在CMakeLists中配置 FastDeploy C++ SDK @@ -246,7 +253,7 @@ install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}/Release) ``` 注意,`install_fastdeploy_libraries`函数仅在最新的代码编译的SDK或版本>0.2.1下有效。 -### 6.3 步骤三:生成工程缓存并修改CMakeSetting.json配置 +#### 3.3.3 步骤三:生成工程缓存并修改CMakeSetting.json配置 @@ -277,7 +284,7 @@ install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}/Release)  -### 6.4 步骤四:生成可执行文件,运行获取结果。 +#### 3.3.4 步骤四:生成可执行文件,运行获取结果。 @@ -319,20 +326,116 @@ Visualized result saved in ./vis_result.jpg 特别说明,exe运行时所需要的依赖库配置方法,请参考章节: [多种方法配置exe运行时所需的依赖库](#CommandLineDeps) -## 7. 多种方法配置exe运行时所需的依赖库 +## 4. 多种方法配置exe运行时所需的依赖库 +说明:对于使用的最新源码编译的SDK或SDK版本>0.2.1的用户,我们推荐使用(4.1)和(4.2)中的方式配置运行时的依赖库。如果使用的SDK版本<=0.2.1,请参考(4.3)和(4.4)中的方式进行配置。 -### 7.1 方式一:修改CMakeLists.txt,一行命令配置(推荐) +### 4.1 方式一:使用 fastdeploy_init.bat 进行配置(推荐) +对于版本高于0.2.1的SDK,我们提供了 **fastdeploy_init.bat** 工具来管理FastDeploy中所有的依赖库。可以通过该脚本工具查看(show)、拷贝(install) 和 设置(init and setup) SDK中所有的dll,方便用户快速完成运行时环境配置。 + +#### 4.1.1 fastdeploy_init.bat 使用说明 + + +首先进入SDK的根目录,运行以下命令,可以查看 fastdeploy_init.bat 的用法说明 +```bat +D:\path-to-your-fastdeploy-sdk-dir>fastdeploy_init.bat help +------------------------------------------------------------------------------------------------------------------------------------------------------------ +[1] [help] print help information: fastdeploy_init.bat help +[2] [show] show all dlls/libs/include paths: fastdeploy_init.bat show fastdeploy-sdk-dir +[3] [init] init all dlls paths for current terminal: fastdeploy_init.bat init fastdeploy-sdk-dir [WARNING: need copy onnxruntime.dll manually] +[4] [setup] setup path env for current terminal: fastdeploy_init.bat setup fastdeploy-sdk-dir [WARNING: need copy onnxruntime.dll manually] +[5] [install] install all dlls to a specific dir: fastdeploy_init.bat install fastdeploy-sdk-dir another-dir-to-install-dlls **[RECOMMEND]** +[6] [install] install all dlls with logging infos: fastdeploy_init.bat install fastdeploy-sdk-dir another-dir-to-install-dlls info +------------------------------------------------------------------------------------------------------------------------------------------------------------ +``` +用法简要说明如下: +- help: 打印所有的用法说明 +- show: 查看SDK中所有的 dll、lib 和 include 路径 +- init: 初始化所有dll路径信息,后续用于设置terminal环境变量(不推荐,请参考4.3中关于onnxruntime的说明) +- setup: 在init之后运行,设置terminal环境便令(不推荐,请参考4.3中关于onnxruntime的说明) +- install: 将SDK中所有的dll安装到某个指定的目录(推荐) +#### 4.1.2 fastdeploy_init.bat 查看 SDK 中所有的 dll、lib 和 include 路径 + + +进入SDK的根目录,运行show命令,可以查看SDK中所有的 dll、lib 和 include 路径。以下命令中 %cd% 表示当前目录(SDK的根目录)。 +```bat +D:\path-to-fastdeploy-sdk-dir>fastdeploy_init.bat show %cd% +------------------------------------------------------------------------------------------------------------------------------------------------------------ +[SDK] D:\path-to-fastdeploy-sdk-dir +------------------------------------------------------------------------------------------------------------------------------------------------------------ +[DLL] D:\path-to-fastdeploy-sdk-dir\lib\fastdeploy.dll **[NEEDED]** +[DLL] D:\path-to-fastdeploy-sdk-dir\third_libs\install\faster_tokenizer\lib\core_tokenizers.dll **[NEEDED]** +[DLL] D:\path-to-fastdeploy-sdk-dir\third_libs\install\opencv\build\x64\vc15\bin\opencv_ffmpeg3416_64.dll **[NEEDED]** +...... +------------------------------------------------------------------------------------------------------------------------------------------------------------ +[Lib] D:\path-to-fastdeploy-sdk-dir\lib\fastdeploy.lib **[NEEDED][fastdeploy]** +[Lib] D:\path-to-fastdeploy-sdk-dir\third_libs\install\faster_tokenizer\lib\core_tokenizers.lib **[NEEDED][fastdeploy::text]** +[Lib] D:\path-to-fastdeploy-sdk-dir\third_libs\install\opencv\build\x64\vc15\lib\opencv_world3416.lib **[NEEDED][fastdeploy::vision]** +...... +------------------------------------------------------------------------------------------------------------------------------------------------------------ +[Include] D:\path-to-fastdeploy-sdk-dir\include **[NEEDED][fastdeploy]** +[Include] D:\path-to-fastdeploy-sdk-dir\third_libs\install\faster_tokenizer\include **[NEEDED][fastdeploy::text]** +[Include] D:\path-to-fastdeploy-sdk-dir\third_libs\install\opencv\build\include **[NEEDED][fastdeploy::vision]** +...... +------------------------------------------------------------------------------------------------------------------------------------------------------------ +[XML] D:\path-to-fastdeploy-sdk-dir\third_libs\install\openvino\runtime\bin\plugins.xml **[NEEDED]** +------------------------------------------------------------------------------------------------------------------------------------------------------------ +``` +可以看到该命令会根据您当前的SDK,输出对应的信息,包含 dll、lib 和 include 的路径信息。对于 dll,被标记为 `[NEEDED]`的,是运行时所需要的,如果包含OpenVINO后端,还需要将他的plugins.xml拷贝到exe所在的目录;对于 lib 和 include,被标记为`[NEEDED]`的,是开发时所需要配置的最小依赖。并且,我们还增加了对应的API Tag标记,如果您只使用vision API,则只需要配置标记为 `[NEEDED][fastdeploy::vision]` 的 lib 和 include 路径. + +#### 4.1.3 fastdeploy_init.bat 安装 SDK 中所有的 dll 到指定的目录 (推荐) + + +进入SDK的根目录,运行install命令,可以将SDK 中所有的 dll 安装到指定的目录(如exe所在的目录)。我们推荐这种方式来配置exe运行所需要的依赖库。比如,可以在SDK根目录下创建一个临时的bin目录备份所有的dll文件。以下命令中 %cd% 表示当前目录(SDK的根目录)。 +```bat +% info参数为可选参数,添加info参数后会打印详细的安装信息 % +D:\path-to-fastdeploy-sdk-dir>fastdeploy_init.bat install %cd% bin +D:\path-to-fastdeploy-sdk-dir>fastdeploy_init.bat install %cd% bin info +``` +```bat +D:\path-to-fastdeploy-sdk-dir>fastdeploy_init.bat install %cd% bin +[INFO] Do you want to install all FastDeploy dlls ? +[INFO] From: D:\path-to-fastdeploy-sdk-dir +[INFO] To: bin +Choose y means YES, n means NO: [y/n]y +YES. +请按任意键继续. . . +[INFO] Created bin done! +已复制 1 个文件。 +已复制 1 个文件。 +已复制 1 个文件。 +已复制 1 个文件。 +..... +已复制 1 个文件。 +已复制 1 个文件。 +已复制 1 个文件。 +已复制 1 个文件。 +..... +``` +#### 4.1.4 fastdeploy_init.bat 配置 SDK 环境变量 + + +您也可以选择通过配置环境变量的方式来设置运行时的依赖库环境,这种方式只在当前的terminal有效。如果您使用的SDK中包含了onnxruntime推理后端,我们不推荐这种方式,详细原因请参考(4.3)中关于onnxruntime配置的说明(需要手动拷贝onnxruntime所有的dll到exe所在的目录)。配置 SDK 环境变量的方式如下。以下命令中 %cd% 表示当前目录(SDK的根目录)。 +```bat +% 先运行 init 初始化当前SDK所有的dll文件路径 % +D:\path-to-fastdeploy-sdk-dir>fastdeploy_init.bat init %cd% +% 再运行 setup 完成 SDK 环境变量配置 % +D:\path-to-fastdeploy-sdk-dir>fastdeploy_init.bat setup %cd% +``` + +### 4.2 方式二:修改CMakeLists.txt,一行命令配置(推荐) + + 考虑到Windows下C++开发的特殊性,如经常需要拷贝所有的lib或dll文件到某个指定的目录,FastDeploy提供了`install_fastdeploy_libraries`的cmake函数,方便用户快速配置所有的dll。修改ppyoloe的CMakeLists.txt,添加: ```cmake install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}/Release) ``` 注意,该方式仅在最新的代码编译的SDK或版本>0.2.1下有效。 -### 7.2 方式二:命令行设置环境变量 - +### 4.3 方式三:命令行设置环境变量 + 编译好的exe保存在Release目录下,在运行demo前,需要将模型和测试图片拷贝至该目录。另外,需要在终端指定DLL的搜索路径。请在build目录下执行以下命令。 ```bat @@ -359,8 +462,8 @@ copy /Y %FASTDEPLOY_HOME%\third_libs\install\onnxruntime\lib\onnxruntime* Releas ```bat where onnxruntime.dll C:\Windows\System32\onnxruntime.dll # windows自带的onnxruntime.dll -``` -另外,注意,如果是自行编译最新的SDK或版本>0.2.1,opencv和openvino目录结构有所改变,路径需要做出适当的修改。如: +``` +另外,注意,如果是自行编译最新的SDK或版本>0.2.1,opencv和openvino目录结构有所改变,路径需要做出适当的修改。如: ```bat set PATH=%FASTDEPLOY_HOME%\third_libs\install\opencv\build\x64\vc15\bin;%PATH% set PATH=%FASTDEPLOY_HOME%\third_libs\install\openvino\runtime\bin;%PATH% @@ -371,9 +474,9 @@ set PATH=%FASTDEPLOY_HOME%\third_libs\install\openvino\runtime\3rdparty\tbb\bin; setup_fastdeploy_dll.bat ``` -### 7.3 方式三:手动拷贝依赖库到exe的目录下 +### 4.4 方式四:手动拷贝依赖库到exe的目录下 - + 手动拷贝,或者在build目录下执行以下命令: ```bat @@ -392,11 +495,11 @@ copy /Y %FASTDEPLOY_HOME%\third_libs\install\yaml-cpp\lib\*.dll Release\ copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\bin\*.dll Release\ copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\bin\*.xml Release\ copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\3rdparty\tbb\bin\*.dll Release\ -``` -另外,注意,如果是自行编译最新的SDK或版本>0.2.1,opencv和openvino目录结构有所改变,路径需要做出适当的修改。如: +``` +另外,注意,如果是自行编译最新的SDK或版本>0.2.1,opencv和openvino目录结构有所改变,路径需要做出适当的修改。如: ```bat copy /Y %FASTDEPLOY_HOME%\third_libs\install\opencv\build\x64\vc15\bin\*.dll Release\ -copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\runtime\bin\*.dll Release\ +copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\runtime\bin\*.dll Release\ copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\runtime\3rdparty\tbb\bin\*.dll Release\ ``` 可以把上述命令拷贝并保存到build目录下的某个bat脚本文件中,如`copy_fastdeploy_dll.bat`,方便多次使用。 @@ -404,10 +507,3 @@ copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\runtime\3rdparty\tbb\bin\* copy_fastdeploy_dll.bat ``` 特别说明:上述的set和copy命令对应的依赖库路径,需要用户根据自己使用SDK中的依赖库进行适当地修改。比如,若是CPU版本的SDK,则不需要TensorRT相关的设置。 - - - -## 8. CLion 2022 IDE 方式使用 C++ SDK - - -- TODO diff --git a/docs/quick_start/use_sdk_on_windows.md b/docs/quick_start/use_sdk_on_windows.md index c19ff6e2c..7548e4aff 100644 --- a/docs/quick_start/use_sdk_on_windows.md +++ b/docs/quick_start/use_sdk_on_windows.md @@ -5,29 +5,33 @@ - 2. 根据开发环境,下载预编译部署库和samples代码,参考[FastDeploy预编译库](../quick_start) ## 目录 -- [环境依赖](#Environment) -- [下载 FastDeploy Windows 10 C++ SDK](#Download) -- [Windows下多种方式使用 C++ SDK 的方式](#CommandLine) - - [方式一:命令行方式使用 C++ SDK](#CommandLine) - - [步骤一:在 Windows 命令行终端 上编译 example](#CommandLine) - - [步骤二:运行可执行文件获得推理结果](#CommandLine) - - [方式二:Visual Studio 2019 创建sln工程使用 C++ SDK](#VisualStudio2019Sln) - - [步骤一:Visual Studio 2019 创建 sln 工程项目](#VisualStudio2019Sln1) - - [步骤二:从examples中拷贝infer_ppyoloe.cc的代码到工程](#VisualStudio2019Sln2) - - [步骤三:将工程配置设置成"Release x64"配置](#VisualStudio2019Sln3) - - [步骤四:配置头文件include路径](#VisualStudio2019Sln4) - - [步骤五:配置lib路径和添加库文件](#VisualStudio2019Sln5) - - [步骤六:编译工程并运行获取结果](#VisualStudio2019Sln6) - - [方式三:Visual Studio 2019 创建CMake工程使用 C++ SDK](#VisualStudio2019) - - [步骤一:Visual Studio 2019 创建CMake工程项目](#VisualStudio20191) - - [步骤二:在CMakeLists中配置 FastDeploy C++ SDK](#VisualStudio20192) - - [步骤三:生成工程缓存并修改CMakeSetting.json配置](#VisualStudio20193) - - [步骤四:生成可执行文件,运行获取结果](#VisualStudio20194) - - [方式四:CLion IDE 方式使用 C++ SDK](#VisualStudioCode) -- [多种方法配置exe运行时所需的依赖库](#CommandLineDeps1) - - [方式一:修改CMakeLists.txt,一行命令配置(推荐)](#CommandLineDeps1) - - [方式二:命令行设置环境变量](#CommandLineDeps2) - - [方法三:手动拷贝依赖库到exe的目录下](#CommandLineDeps3) +- [1. 环境依赖](#Environment) +- [2. 下载 FastDeploy Windows 10 C++ SDK](#Download) +- [3. Windows下多种方式使用 C++ SDK 的方式](#CommandLine) + - [3.1 命令行方式使用 C++ SDK](#CommandLine) + - [3.1.1 在 Windows 命令行终端 上编译 example](#CommandLine) + - [3.1.2 运行可执行文件获得推理结果](#CommandLine) + - [3.2 Visual Studio 2019 创建sln工程使用 C++ SDK](#VisualStudio2019Sln) + - [3.2.1 Visual Studio 2019 创建 sln 工程项目](#VisualStudio2019Sln1) + - [3.2.2 从examples中拷贝infer_ppyoloe.cc的代码到工程](#VisualStudio2019Sln2) + - [3.2.3 将工程配置设置成"Release x64"配置](#VisualStudio2019Sln3) + - [3.2.4 配置头文件include路径](#VisualStudio2019Sln4) + - [3.2.5 配置lib路径和添加库文件](#VisualStudio2019Sln5) + - [3.2.6 编译工程并运行获取结果](#VisualStudio2019Sln6) + - [3.3 Visual Studio 2019 创建CMake工程使用 C++ SDK](#VisualStudio2019) + - [3.3.1 Visual Studio 2019 创建CMake工程项目](#VisualStudio20191) + - [3.3.2 在CMakeLists中配置 FastDeploy C++ SDK](#VisualStudio20192) + - [3.3.3 生成工程缓存并修改CMakeSetting.json配置](#VisualStudio20193) + - [3.3.4 生成可执行文件,运行获取结果](#VisualStudio20194) +- [4. 多种方法配置exe运行时所需的依赖库](#CommandLineDeps1) + - [4.1 使用 fastdeploy_init.bat 进行配置(推荐)](#CommandLineDeps1) + - [4.1.1 fastdeploy_init.bat 使用说明](#CommandLineDeps11) + - [4.1.2 fastdeploy_init.bat 查看 SDK 中所有的 dll、lib 和 include 路径](#CommandLineDeps12) + - [4.1.3 fastdeploy_init.bat 安装 SDK 中所有的 dll 到指定的目录](#CommandLineDeps13) + - [4.1.4 fastdeploy_init.bat 配置 SDK 环境变量](#CommandLineDeps14) + - [4.2 修改 CMakeLists.txt,一行命令配置(推荐)](#CommandLineDeps2) + - [4.3 命令行设置环境变量](#CommandLineDeps3) + - [4.4 手动拷贝依赖库到exe的目录下](#CommandLineDeps4) ## 1. 环境依赖 @@ -41,21 +45,24 @@ ## 2. 下载 FastDeploy Windows 10 C++ SDK +### 2.1 下载预编译库或者从源码编译最新的SDK 可以从以下链接下载编译好的 FastDeploy Windows 10 C++ SDK,SDK中包含了examples代码。 ```text https://bj.bcebos.com/fastdeploy/release/cpp/fastdeploy-win-x64-gpu-0.2.1.zip ``` -## 3. 准备模型文件和测试图片 +源码编译请参考: [Windows C++ SDK源码编译文档](../compile/how_to_build_windows.md) +### 2.2 准备模型文件和测试图片 可以从以下链接下载模型文件和测试图片,并解压缩 ```text https://bj.bcebos.com/paddlehub/fastdeploy/ppyoloe_crn_l_300e_coco.tgz # (下载后解压缩) https://gitee.com/paddlepaddle/PaddleDetection/raw/release/2.4/demo/000000014439.jpg ``` -## 4. SDK使用方式一:命令行方式使用 C++ SDK +## 3. Windows下多种方式使用 C++ SDK 的方式 +### 3.1 SDK使用方式一:命令行方式使用 C++ SDK -### 4.1 在 Windows 上编译 PPYOLOE +#### 3.1.1 在 Windows 上编译 PPYOLOE Windows菜单打开`x64 Native Tools Command Prompt for VS 2019`命令工具,cd到ppyoloe的demo路径 ```bat cd fastdeploy-win-x64-gpu-0.2.1\examples\vision\detection\paddledetection\cpp @@ -69,7 +76,7 @@ cmake .. -G "Visual Studio 16 2019" -A x64 -DFASTDEPLOY_INSTALL_DIR=%cd%\..\..\. msbuild infer_demo.sln /m:4 /p:Configuration=Release /p:Platform=x64 ``` -### 4.2 运行 demo +#### 3.1.2 运行 demo ```bat cd Release infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 0 # CPU @@ -79,13 +86,13 @@ infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 2 # GPU + Tenso 特别说明,exe运行时所需要的依赖库配置方法,请参考章节: [多种方法配置exe运行时所需的依赖库](#CommandLineDeps) -## 5. SDK使用方式二:Visual Studio 2019 创建 sln 工程使用 C++ SDK +### 3.2 SDK使用方式二:Visual Studio 2019 创建 sln 工程使用 C++ SDK 本章节针对非CMake用户,介绍如何在Visual Studio 2019 中创建 sln 工程使用 FastDeploy C++ SDK. CMake用户请直接看下一章节。另外,本章节内容特别感谢“梦醒南天”同学关于FastDeploy使用的文档教程:[如何在 Windows 上使用 FastDeploy C++ 部署 PaddleDetection 目标检测模型](https://www.bilibili.com/read/cv18807232) -### 5.1 步骤一:Visual Studio 2019 创建 sln 工程项目 +#### 3.2.1 步骤一:Visual Studio 2019 创建 sln 工程项目 @@ -99,7 +106,7 @@ infer_ppyoloe_demo.exe ppyoloe_crn_l_300e_coco 000000014439.jpg 2 # GPU + Tenso  -### 5.2 步骤二:从examples中拷贝infer_ppyoloe.cc的代码到工程 +#### 3.2.2 步骤二:从examples中拷贝infer_ppyoloe.cc的代码到工程 @@ -110,13 +117,13 @@ fastdeploy-win-x64-gpu-0.2.1\examples\vision\detection\paddledetection\cpp  -### 5.3 步骤三:将工程配置设置成"Release x64"配置 +#### 3.2.3 步骤三:将工程配置设置成"Release x64"配置  -### 5.4 步骤四:配置头文件include路径 +#### 3.2.4 步骤四:配置头文件include路径 @@ -133,7 +140,7 @@ fastdeploy-win-x64-gpu-0.2.1\examples\vision\detection\paddledetection\cpp D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\include D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\install\opencv-win-x64-3.4.16\build\include ``` -注意,如果是自行编译最新的SDK或版本>0.2.1,依赖库目录结构有所变动,opencv路径需要做出适当的修改。如: +注意,如果是自行编译最新的SDK或版本>0.2.1,依赖库目录结构有所变动,opencv路径需要做出适当的修改。如: ```bat D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\install\opencv\build\include ``` @@ -143,7 +150,7 @@ D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\inst 用户需要根据自己实际的sdk路径稍作修改。 -### 5.5 步骤五:配置lib路径和添加库文件 +#### 3.2.5 步骤五:配置lib路径和添加库文件 @@ -151,8 +158,8 @@ D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\inst ```bat D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\lib D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\install\opencv-win-x64-3.4.16\build\x64\vc15\lib -``` -注意,如果是自行编译最新的SDK或版本>0.2.1,依赖库目录结构有所变动,opencv路径需要做出适当的修改。如: +``` +注意,如果是自行编译最新的SDK或版本>0.2.1,依赖库目录结构有所变动,opencv路径需要做出适当的修改。如: ```bat D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\install\opencv\build\include ``` @@ -163,7 +170,7 @@ D:\qiuyanjun\fastdeploy_build\built\fastdeploy-win-x64-gpu-0.2.1\third_libs\inst  -### 5.6 步骤六:编译工程并运行获取结果 +#### 3.2.6 步骤六:编译工程并运行获取结果 @@ -184,12 +191,12 @@ D:\qiuyanjun\fastdeploy_test\infer_ppyoloe\x64\Release\infer_ppyoloe.exe  -## 6. SDK使用方式三:Visual Studio 2019 创建 CMake 工程使用 C++ SDK +### 3.3 SDK使用方式三:Visual Studio 2019 创建 CMake 工程使用 C++ SDK 本章节针对CMake用户,介绍如何在Visual Studio 2019 中创建 CMake 工程使用 FastDeploy C++ SDK. -### 6.1 步骤一:Visual Studio 2019 创建“CMake”工程项目 +#### 3.3.1 步骤一:Visual Studio 2019 创建“CMake”工程项目 @@ -206,7 +213,7 @@ D:\qiuyanjun\fastdeploy_test\infer_ppyoloe\x64\Release\infer_ppyoloe.exe  -### 6.2 步骤二:在CMakeLists中配置 FastDeploy C++ SDK +#### 3.3.2 步骤二:在CMakeLists中配置 FastDeploy C++ SDK @@ -246,7 +253,7 @@ install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}/Release) ``` 注意,`install_fastdeploy_libraries`函数仅在最新的代码编译的SDK或版本>0.2.1下有效。 -### 6.3 步骤三:生成工程缓存并修改CMakeSetting.json配置 +#### 3.3.3 步骤三:生成工程缓存并修改CMakeSetting.json配置 @@ -277,7 +284,7 @@ install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}/Release)  -### 6.4 步骤四:生成可执行文件,运行获取结果。 +#### 3.3.4 步骤四:生成可执行文件,运行获取结果。 @@ -319,20 +326,116 @@ Visualized result saved in ./vis_result.jpg 特别说明,exe运行时所需要的依赖库配置方法,请参考章节: [多种方法配置exe运行时所需的依赖库](#CommandLineDeps) -## 7. 多种方法配置exe运行时所需的依赖库 +## 4. 多种方法配置exe运行时所需的依赖库 +说明:对于使用的最新源码编译的SDK或SDK版本>0.2.1的用户,我们推荐使用(4.1)和(4.2)中的方式配置运行时的依赖库。如果使用的SDK版本<=0.2.1,请参考(4.3)和(4.4)中的方式进行配置。 -### 7.1 方式一:修改CMakeLists.txt,一行命令配置(推荐) +### 4.1 方式一:使用 fastdeploy_init.bat 进行配置(推荐) +对于版本高于0.2.1的SDK,我们提供了 **fastdeploy_init.bat** 工具来管理FastDeploy中所有的依赖库。可以通过该脚本工具查看(show)、拷贝(install) 和 设置(init and setup) SDK中所有的dll,方便用户快速完成运行时环境配置。 + +#### 4.1.1 fastdeploy_init.bat 使用说明 + + +首先进入SDK的根目录,运行以下命令,可以查看 fastdeploy_init.bat 的用法说明 +```bat +D:\path-to-your-fastdeploy-sdk-dir>fastdeploy_init.bat help +------------------------------------------------------------------------------------------------------------------------------------------------------------ +[1] [help] print help information: fastdeploy_init.bat help +[2] [show] show all dlls/libs/include paths: fastdeploy_init.bat show fastdeploy-sdk-dir +[3] [init] init all dlls paths for current terminal: fastdeploy_init.bat init fastdeploy-sdk-dir [WARNING: need copy onnxruntime.dll manually] +[4] [setup] setup path env for current terminal: fastdeploy_init.bat setup fastdeploy-sdk-dir [WARNING: need copy onnxruntime.dll manually] +[5] [install] install all dlls to a specific dir: fastdeploy_init.bat install fastdeploy-sdk-dir another-dir-to-install-dlls **[RECOMMEND]** +[6] [install] install all dlls with logging infos: fastdeploy_init.bat install fastdeploy-sdk-dir another-dir-to-install-dlls info +------------------------------------------------------------------------------------------------------------------------------------------------------------ +``` +用法简要说明如下: +- help: 打印所有的用法说明 +- show: 查看SDK中所有的 dll、lib 和 include 路径 +- init: 初始化所有dll路径信息,后续用于设置terminal环境变量(不推荐,请参考4.3中关于onnxruntime的说明) +- setup: 在init之后运行,设置terminal环境便令(不推荐,请参考4.3中关于onnxruntime的说明) +- install: 将SDK中所有的dll安装到某个指定的目录(推荐) +#### 4.1.2 fastdeploy_init.bat 查看 SDK 中所有的 dll、lib 和 include 路径 + + +进入SDK的根目录,运行show命令,可以查看SDK中所有的 dll、lib 和 include 路径。以下命令中 %cd% 表示当前目录(SDK的根目录)。 +```bat +D:\path-to-fastdeploy-sdk-dir>fastdeploy_init.bat show %cd% +------------------------------------------------------------------------------------------------------------------------------------------------------------ +[SDK] D:\path-to-fastdeploy-sdk-dir +------------------------------------------------------------------------------------------------------------------------------------------------------------ +[DLL] D:\path-to-fastdeploy-sdk-dir\lib\fastdeploy.dll **[NEEDED]** +[DLL] D:\path-to-fastdeploy-sdk-dir\third_libs\install\faster_tokenizer\lib\core_tokenizers.dll **[NEEDED]** +[DLL] D:\path-to-fastdeploy-sdk-dir\third_libs\install\opencv\build\x64\vc15\bin\opencv_ffmpeg3416_64.dll **[NEEDED]** +...... +------------------------------------------------------------------------------------------------------------------------------------------------------------ +[Lib] D:\path-to-fastdeploy-sdk-dir\lib\fastdeploy.lib **[NEEDED][fastdeploy]** +[Lib] D:\path-to-fastdeploy-sdk-dir\third_libs\install\faster_tokenizer\lib\core_tokenizers.lib **[NEEDED][fastdeploy::text]** +[Lib] D:\path-to-fastdeploy-sdk-dir\third_libs\install\opencv\build\x64\vc15\lib\opencv_world3416.lib **[NEEDED][fastdeploy::vision]** +...... +------------------------------------------------------------------------------------------------------------------------------------------------------------ +[Include] D:\path-to-fastdeploy-sdk-dir\include **[NEEDED][fastdeploy]** +[Include] D:\path-to-fastdeploy-sdk-dir\third_libs\install\faster_tokenizer\include **[NEEDED][fastdeploy::text]** +[Include] D:\path-to-fastdeploy-sdk-dir\third_libs\install\opencv\build\include **[NEEDED][fastdeploy::vision]** +...... +------------------------------------------------------------------------------------------------------------------------------------------------------------ +[XML] D:\path-to-fastdeploy-sdk-dir\third_libs\install\openvino\runtime\bin\plugins.xml **[NEEDED]** +------------------------------------------------------------------------------------------------------------------------------------------------------------ +``` +可以看到该命令会根据您当前的SDK,输出对应的信息,包含 dll、lib 和 include 的路径信息。对于 dll,被标记为 `[NEEDED]`的,是运行时所需要的,如果包含OpenVINO后端,还需要将他的plugins.xml拷贝到exe所在的目录;对于 lib 和 include,被标记为`[NEEDED]`的,是开发时所需要配置的最小依赖。并且,我们还增加了对应的API Tag标记,如果您只使用vision API,则只需要配置标记为 `[NEEDED][fastdeploy::vision]` 的 lib 和 include 路径. + +#### 4.1.3 fastdeploy_init.bat 安装 SDK 中所有的 dll 到指定的目录 (推荐) + + +进入SDK的根目录,运行install命令,可以将SDK 中所有的 dll 安装到指定的目录(如exe所在的目录)。我们推荐这种方式来配置exe运行所需要的依赖库。比如,可以在SDK根目录下创建一个临时的bin目录备份所有的dll文件。以下命令中 %cd% 表示当前目录(SDK的根目录)。 +```bat +% info参数为可选参数,添加info参数后会打印详细的安装信息 % +D:\path-to-fastdeploy-sdk-dir>fastdeploy_init.bat install %cd% bin +D:\path-to-fastdeploy-sdk-dir>fastdeploy_init.bat install %cd% bin info +``` +```bat +D:\path-to-fastdeploy-sdk-dir>fastdeploy_init.bat install %cd% bin +[INFO] Do you want to install all FastDeploy dlls ? +[INFO] From: D:\path-to-fastdeploy-sdk-dir +[INFO] To: bin +Choose y means YES, n means NO: [y/n]y +YES. +请按任意键继续. . . +[INFO] Created bin done! +已复制 1 个文件。 +已复制 1 个文件。 +已复制 1 个文件。 +已复制 1 个文件。 +..... +已复制 1 个文件。 +已复制 1 个文件。 +已复制 1 个文件。 +已复制 1 个文件。 +..... +``` +#### 4.1.4 fastdeploy_init.bat 配置 SDK 环境变量 + + +您也可以选择通过配置环境变量的方式来设置运行时的依赖库环境,这种方式只在当前的terminal有效。如果您使用的SDK中包含了onnxruntime推理后端,我们不推荐这种方式,详细原因请参考(4.3)中关于onnxruntime配置的说明(需要手动拷贝onnxruntime所有的dll到exe所在的目录)。配置 SDK 环境变量的方式如下。以下命令中 %cd% 表示当前目录(SDK的根目录)。 +```bat +% 先运行 init 初始化当前SDK所有的dll文件路径 % +D:\path-to-fastdeploy-sdk-dir>fastdeploy_init.bat init %cd% +% 再运行 setup 完成 SDK 环境变量配置 % +D:\path-to-fastdeploy-sdk-dir>fastdeploy_init.bat setup %cd% +``` + +### 4.2 方式二:修改CMakeLists.txt,一行命令配置(推荐) + + 考虑到Windows下C++开发的特殊性,如经常需要拷贝所有的lib或dll文件到某个指定的目录,FastDeploy提供了`install_fastdeploy_libraries`的cmake函数,方便用户快速配置所有的dll。修改ppyoloe的CMakeLists.txt,添加: ```cmake install_fastdeploy_libraries(${CMAKE_CURRENT_BINARY_DIR}/Release) ``` 注意,该方式仅在最新的代码编译的SDK或版本>0.2.1下有效。 -### 7.2 方式二:命令行设置环境变量 - +### 4.3 方式三:命令行设置环境变量 + 编译好的exe保存在Release目录下,在运行demo前,需要将模型和测试图片拷贝至该目录。另外,需要在终端指定DLL的搜索路径。请在build目录下执行以下命令。 ```bat @@ -359,8 +462,8 @@ copy /Y %FASTDEPLOY_HOME%\third_libs\install\onnxruntime\lib\onnxruntime* Releas ```bat where onnxruntime.dll C:\Windows\System32\onnxruntime.dll # windows自带的onnxruntime.dll -``` -另外,注意,如果是自行编译最新的SDK或版本>0.2.1,opencv和openvino目录结构有所改变,路径需要做出适当的修改。如: +``` +另外,注意,如果是自行编译最新的SDK或版本>0.2.1,opencv和openvino目录结构有所改变,路径需要做出适当的修改。如: ```bat set PATH=%FASTDEPLOY_HOME%\third_libs\install\opencv\build\x64\vc15\bin;%PATH% set PATH=%FASTDEPLOY_HOME%\third_libs\install\openvino\runtime\bin;%PATH% @@ -371,9 +474,9 @@ set PATH=%FASTDEPLOY_HOME%\third_libs\install\openvino\runtime\3rdparty\tbb\bin; setup_fastdeploy_dll.bat ``` -### 7.3 方式三:手动拷贝依赖库到exe的目录下 +### 4.4 方式四:手动拷贝依赖库到exe的目录下 - + 手动拷贝,或者在build目录下执行以下命令: ```bat @@ -392,11 +495,11 @@ copy /Y %FASTDEPLOY_HOME%\third_libs\install\yaml-cpp\lib\*.dll Release\ copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\bin\*.dll Release\ copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\bin\*.xml Release\ copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\3rdparty\tbb\bin\*.dll Release\ -``` -另外,注意,如果是自行编译最新的SDK或版本>0.2.1,opencv和openvino目录结构有所改变,路径需要做出适当的修改。如: +``` +另外,注意,如果是自行编译最新的SDK或版本>0.2.1,opencv和openvino目录结构有所改变,路径需要做出适当的修改。如: ```bat copy /Y %FASTDEPLOY_HOME%\third_libs\install\opencv\build\x64\vc15\bin\*.dll Release\ -copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\runtime\bin\*.dll Release\ +copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\runtime\bin\*.dll Release\ copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\runtime\3rdparty\tbb\bin\*.dll Release\ ``` 可以把上述命令拷贝并保存到build目录下的某个bat脚本文件中,如`copy_fastdeploy_dll.bat`,方便多次使用。 @@ -404,10 +507,3 @@ copy /Y %FASTDEPLOY_HOME%\third_libs\install\openvino\runtime\3rdparty\tbb\bin\* copy_fastdeploy_dll.bat ``` 特别说明:上述的set和copy命令对应的依赖库路径,需要用户根据自己使用SDK中的依赖库进行适当地修改。比如,若是CPU版本的SDK,则不需要TensorRT相关的设置。 - - - -## 8. CLion 2022 IDE 方式使用 C++ SDK - - -- TODO diff --git a/scripts/fastdeploy_init.bat b/scripts/fastdeploy_init.bat new file mode 100644 index 000000000..a7b8567b2 --- /dev/null +++ b/scripts/fastdeploy_init.bat @@ -0,0 +1,167 @@ +@echo off + +set __script_action_type=%1 +set __fastdeploy_sdk_dir=%2 +set __another_target_dir=%3 +set __install_infos_flag=%4 + +@rem help +if "%__script_action_type%" == "help" ( + call:__print_long_line + echo [1] [help] print help information: fastdeploy_init.bat help + echo [2] [show] show all dlls/libs/include paths: fastdeploy_init.bat show fastdeploy-sdk-dir + echo [3] [init] init all dlls paths for current terminal: fastdeploy_init.bat init fastdeploy-sdk-dir [WARNING: need copy onnxruntime.dll manually] + echo [4] [setup] setup path env for current terminal: fastdeploy_init.bat setup fastdeploy-sdk-dir [WARNING: need copy onnxruntime.dll manually] + echo [5] [install] install all dlls to a specific dir: fastdeploy_init.bat install fastdeploy-sdk-dir another-dir-to-install-dlls **[RECOMMEND]** + echo [6] [install] install all dlls with logging infos: fastdeploy_init.bat install fastdeploy-sdk-dir another-dir-to-install-dlls info + call:__print_long_line + goto:eof +) + +@rem show dlls and libs +if "%__script_action_type%" == "show" ( + + call:__print_long_line + echo [SDK] %__fastdeploy_sdk_dir% + + call:__print_long_line + set __have_openvino_flag=false + set __fastdeploy_lib_dir=%__fastdeploy_sdk_dir%\lib + + @setlocal enabledelayedexpansion + echo [DLL] !__fastdeploy_lib_dir!\fastdeploy.dll **[NEEDED]** + for /f "delims= " %%a in ('dir /s /b %__fastdeploy_sdk_dir%\third_libs ^| findstr /e \.dll ^| findstr /v "vc14\\bin\\opencv"') do ( + set __3rd_dll_file=%%a && set __3rd_needed_flag=true + echo !__3rd_dll_file! | findstr "openvino">nul && set __have_openvino_flag=true + echo !__3rd_dll_file! | findstr d\.dll>nul && set __3rd_needed_flag=false + if "!__3rd_needed_flag!"=="false" (echo !__3rd_dll_file! | findstr /v opencv>nul && set __3rd_needed_flag=true) + echo !__3rd_dll_file! | findstr debug\.dll>nul && set __3rd_needed_flag=false + if "!__3rd_needed_flag!"=="true" (echo [DLL] !__3rd_dll_file! **[NEEDED]**) else (echo [DLL] !__3rd_dll_file!) + ) + + call:__print_long_line + echo [Lib] !__fastdeploy_lib_dir!\fastdeploy.lib **[NEEDED][fastdeploy]** + for /f "delims= " %%a in ('dir /s /b %__fastdeploy_sdk_dir%\third_libs ^| findstr /e \.lib ^| findstr /v "vc14\\lib\\opencv"') do ( + set __3rd_lib_file=%%a && set __3rd_needed_flag=false && set __api_tag=fastdeploy + echo !__3rd_lib_file! | findstr "opencv">nul && set __3rd_needed_flag=true + echo !__3rd_lib_file! | findstr "opencv">nul && set __api_tag=!__api_tag!::vision + if "!__3rd_needed_flag!"=="true" (echo !__3rd_lib_file! | findstr d\.lib>nul && set __3rd_needed_flag=false) + echo !__3rd_lib_file! | findstr "faster_tokenizer">nul && set __3rd_needed_flag=true + echo !__3rd_lib_file! | findstr "faster_tokenizer">nul && set __api_tag=!__api_tag!::text + if "!__3rd_needed_flag!"=="true" (echo [Lib] !__3rd_lib_file! **[NEEDED][!__api_tag!]**) else (echo [Lib] !__3rd_lib_file!) + ) + + call:__print_long_line + set __fastdeploy_include_dir=%__fastdeploy_sdk_dir%\include + echo [Include] !__fastdeploy_include_dir! **[NEEDED][fastdeploy]** + for /f "delims= " %%a in ('dir /s /b %__fastdeploy_sdk_dir%\third_libs ^| findstr /e include ^| findstr /v "vc14\\bin\\opencv"') do ( + set __3rd_include_dir=%%a && set __3rd_needed_flag=false && set __api_tag=fastdeploy + echo !__3rd_include_dir! | findstr "opencv">nul && set __3rd_needed_flag=true + echo !__3rd_include_dir! | findstr "opencv">nul && set __api_tag=!__api_tag!::vision + echo !__3rd_include_dir! | findstr "faster_tokenizer">nul && set __3rd_needed_flag=true + echo !__3rd_include_dir! | findstr "faster_tokenizer">nul && set __api_tag=!__api_tag!::text + if "!__3rd_needed_flag!"=="true" (echo [Include] !__3rd_include_dir! **[NEEDED][!__api_tag!]**) else (echo [Include] !__3rd_include_dir!) + ) + + call:__print_long_line + if "!__have_openvino_flag!"=="true" ( + for /f "delims= " %%a in ('dir /s /b %__fastdeploy_sdk_dir%\third_libs ^| findstr /e \.xml ^| findstr "openvino"') do ( + set __openvino_plugin_xml=%%a + echo [XML] !__openvino_plugin_xml! **[NEEDED]** + ) + call:__print_long_line + ) + @setlocal disabledelayedexpansion + goto:eof +) + +@rem init all paths for dlls +if "%__script_action_type%" == "init" ( + @setlocal enabledelayedexpansion + set /p yes_or_no=Init dll paths for FastDeploy in current terminal: [y/n] + if "!yes_or_no!"=="y" (echo YES.) else (echo NO. && pause && goto:eof) + @setlocal disabledelayedexpansion + if exist bin.txt (del /Q bin.txt) + if exist lib.txt (del /Q lib.txt) + for /f "delims= " %%a in ('dir /s /b /A:D %__fastdeploy_sdk_dir% ^| findstr /v include ^| findstr /e bin ^| findstr /v "vc14\\bin"') do (>>bin.txt set /p=%%a;