diff --git a/CMakeLists.txt b/CMakeLists.txt index 50cfb82d5..67d006b46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,6 +51,7 @@ option(ENABLE_VISION_VISUALIZE "Whether to enable visualize vision model result option(ENABLE_TEXT "Whether to enable text models usage." OFF) option(WITH_TESTING "Whether to compile with unittest." OFF) option(OPENCV_DIRECTORY "User can specify the installed opencv directory.") +option(ORT_DIRECTORY "User can specify the installed onnxruntime directory.") # Please don't open this flag now, some bugs exists. # option(ENABLE_OPENCV_CUDA "Whether to enable opencv with cuda, this will allow process image with GPU." OFF) @@ -146,6 +147,12 @@ endif(ENABLE_PADDLE_FRONTEND) if(ENABLE_ORT_BACKEND) add_definitions(-DENABLE_ORT_BACKEND) list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_ORT_SRCS}) + if (ORT_DIRECTORY) + message(STATUS "Use the onnxruntime lib specified by user. The ONNXRuntime path: ${ORT_DIRECTORY}") + STRING(REGEX REPLACE "\\\\" "/" ORT_DIRECTORY ${ORT_DIRECTORY}) + else() + message(STATUS "Use the default onnxruntime lib.") + endif() include(${PROJECT_SOURCE_DIR}/cmake/onnxruntime.cmake) list(APPEND DEPEND_LIBS external_onnxruntime) endif() diff --git a/FastDeploy.cmake.in b/FastDeploy.cmake.in index 2da50867d..a2902107f 100644 --- a/FastDeploy.cmake.in +++ b/FastDeploy.cmake.in @@ -13,6 +13,7 @@ set(ENABLE_TEXT @ENABLE_TEXT@) # set(ENABLE_OPENCV_CUDA @ENABLE_OPENCV_CUDA@) set(LIBRARY_NAME @LIBRARY_NAME@) set(OPENCV_DIRECTORY @OPENCV_DIRECTORY@) +set(ORT_DIRECTORY @ORT_DIRECTORY@) set(FASTDEPLOY_LIBS "") set(FASTDEPLOY_INCS "") @@ -26,7 +27,12 @@ find_library(FDLIB ${LIBRARY_NAME} ${CMAKE_CURRENT_LIST_DIR}/lib NO_DEFAULT_PATH list(APPEND FASTDEPLOY_LIBS ${FDLIB}) if(ENABLE_ORT_BACKEND) - find_library(ORT_LIB onnxruntime ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/onnxruntime/lib NO_DEFAULT_PATH) + if (ORT_DIRECTORY) + set(ORT_LIB_PATH ${ORT_DIRECTORY}/lib) + else() + set(ORT_LIB_PATH ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/onnxruntime/lib) + endif() + find_library(ORT_LIB onnxruntime ${ORT_LIB_PATH} NO_DEFAULT_PATH) list(APPEND FASTDEPLOY_LIBS ${ORT_LIB}) endif() diff --git a/cmake/onnxruntime.cmake b/cmake/onnxruntime.cmake index 241fc1aa2..7124f4ea8 100644 --- a/cmake/onnxruntime.cmake +++ b/cmake/onnxruntime.cmake @@ -19,12 +19,23 @@ set(ONNXRUNTIME_PREFIX_DIR ${THIRD_PARTY_PATH}/onnxruntime) set(ONNXRUNTIME_SOURCE_DIR ${THIRD_PARTY_PATH}/onnxruntime/src/${ONNXRUNTIME_PROJECT}) set(ONNXRUNTIME_INSTALL_DIR ${THIRD_PARTY_PATH}/install/onnxruntime) -set(ONNXRUNTIME_INC_DIR - "${ONNXRUNTIME_INSTALL_DIR}/include" + +if (ORT_DIRECTORY) + set(ONNXRUNTIME_INC_DIR + "${ORT_DIRECTORY}/include" CACHE PATH "onnxruntime include directory." FORCE) -set(ONNXRUNTIME_LIB_DIR - "${ONNXRUNTIME_INSTALL_DIR}/lib" + + set(ONNXRUNTIME_LIB_DIR + "${ORT_DIRECTORY}/lib" CACHE PATH "onnxruntime lib directory." FORCE) +else() + set(ONNXRUNTIME_INC_DIR + "${ONNXRUNTIME_INSTALL_DIR}/include" + CACHE PATH "onnxruntime include directory." FORCE) + set(ONNXRUNTIME_LIB_DIR + "${ONNXRUNTIME_INSTALL_DIR}/lib" + CACHE PATH "onnxruntime lib directory." FORCE) +endif() set(CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}" "${ONNXRUNTIME_LIB_DIR}") set(ONNXRUNTIME_VERSION "1.12.0") @@ -68,34 +79,36 @@ include_directories(${ONNXRUNTIME_INC_DIR} if(WIN32) set(ONNXRUNTIME_LIB - "${ONNXRUNTIME_INSTALL_DIR}/lib/onnxruntime.lib" - CACHE FILEPATH "ONNXRUNTIME static library." FORCE) + "${ONNXRUNTIME_LIB_DIR}/onnxruntime.lib" + CACHE FILEPATH "ONNXRUNTIME shared library." FORCE) elseif(APPLE) set(ONNXRUNTIME_LIB - "${ONNXRUNTIME_INSTALL_DIR}/lib/libonnxruntime.dylib" - CACHE FILEPATH "ONNXRUNTIME static library." FORCE) + "${ONNXRUNTIME_LIB_DIR}/libonnxruntime.dylib" + CACHE FILEPATH "ONNXRUNTIME shared library." FORCE) else() set(ONNXRUNTIME_LIB - "${ONNXRUNTIME_INSTALL_DIR}/lib/libonnxruntime.so" - CACHE FILEPATH "ONNXRUNTIME static library." FORCE) + "${ONNXRUNTIME_LIB_DIR}/libonnxruntime.so" + CACHE FILEPATH "ONNXRUNTIME shared library." FORCE) endif() -ExternalProject_Add( - ${ONNXRUNTIME_PROJECT} - ${EXTERNAL_PROJECT_LOG_ARGS} - URL ${ONNXRUNTIME_URL} - PREFIX ${ONNXRUNTIME_PREFIX_DIR} - DOWNLOAD_NO_PROGRESS 1 - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - UPDATE_COMMAND "" - INSTALL_COMMAND - ${CMAKE_COMMAND} -E remove_directory ${ONNXRUNTIME_INSTALL_DIR} && - ${CMAKE_COMMAND} -E make_directory ${ONNXRUNTIME_INSTALL_DIR} && - ${CMAKE_COMMAND} -E rename ${ONNXRUNTIME_SOURCE_DIR}/lib/ ${ONNXRUNTIME_INSTALL_DIR}/lib && - ${CMAKE_COMMAND} -E copy_directory ${ONNXRUNTIME_SOURCE_DIR}/include - ${ONNXRUNTIME_INC_DIR} - BUILD_BYPRODUCTS ${ONNXRUNTIME_LIB}) +if (NOT ORT_DIRECTORY) + ExternalProject_Add( + ${ONNXRUNTIME_PROJECT} + ${EXTERNAL_PROJECT_LOG_ARGS} + URL ${ONNXRUNTIME_URL} + PREFIX ${ONNXRUNTIME_PREFIX_DIR} + DOWNLOAD_NO_PROGRESS 1 + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + UPDATE_COMMAND "" + INSTALL_COMMAND + ${CMAKE_COMMAND} -E remove_directory ${ONNXRUNTIME_INSTALL_DIR} && + ${CMAKE_COMMAND} -E make_directory ${ONNXRUNTIME_INSTALL_DIR} && + ${CMAKE_COMMAND} -E rename ${ONNXRUNTIME_SOURCE_DIR}/lib/ ${ONNXRUNTIME_INSTALL_DIR}/lib && + ${CMAKE_COMMAND} -E copy_directory ${ONNXRUNTIME_SOURCE_DIR}/include + ${ONNXRUNTIME_INC_DIR} + BUILD_BYPRODUCTS ${ONNXRUNTIME_LIB}) +endif() add_library(external_onnxruntime STATIC IMPORTED GLOBAL) set_property(TARGET external_onnxruntime PROPERTY IMPORTED_LOCATION ${ONNXRUNTIME_LIB}) diff --git a/docs/compile/README.md b/docs/compile/README.md index f839f2a0e..230309f91 100644 --- a/docs/compile/README.md +++ b/docs/compile/README.md @@ -18,6 +18,8 @@ | TRT_DIRECTORY | 当启用TensorRT推理后端时,需通过此参数指定TensorRT路径 | TensorRT 8.4及以上 | | ENABLE_VISION | 启用视觉模型模块,默认为ON | | | ENABLE_TEXT | 启用文本模型模块,默认为ON | | +| OPENCV_DIRECTORY | 指定已安装OpenCV库的路径,默认为空| 若没指定OpenCV库路径,则会自动下载安装OpenCV | +| ORT_DIRECTORY | 指定已安装ONNXRuntime库的路径,默认为空| 若没指定ONNXRuntime库路径,则会自动下载安装ONNXRuntime | -FastDeploy支持在编译时,用户选择自己的后端进行编译, 目前已经支持Paddle Inference、ONNXRuntime、TensorRT(加载ONNX格式)。FastDeploy已支持的模型已完成在不同后端上的验证工作,会自动根据编译时支持的后端进行选择,如若无可用后端则会给出相应提示(如YOLOv7目前仅支持ONNXRuntime/TensorRT后端,如若编译时未开启这两个后端,则推理时会提示无可用后端)。 +FastDeploy支持在编译时,用户选择自己的后端进行编译, 目前已经支持Paddle Inference、ONNXRuntime、TensorRT(加载ONNX格式)。FastDeploy已支持的模型已完成在不同后端上的验证工作,会自动根据编译时支持的后端进行选择,如若无可用后端则会给出相应提示(如YOLOv7目前仅支持ONNXRuntime/TensorRT后端,如若编译时未开启这两个后端,则推理时会提示无可用后端)。 diff --git a/python/fastdeploy/c_lib_wrap.py.in b/python/fastdeploy/c_lib_wrap.py.in index 06a4357bf..9a4f49072 100644 --- a/python/fastdeploy/c_lib_wrap.py.in +++ b/python/fastdeploy/c_lib_wrap.py.in @@ -16,7 +16,7 @@ import logging import os import sys -user_specified_dirs = ['@OPENCV_DIRECTORY@', ] +user_specified_dirs = ['@OPENCV_DIRECTORY@', '@ORT_DIRECTORY@', ] def is_built_with_gpu() -> bool: diff --git a/python/scripts/process_libraries.py.in b/python/scripts/process_libraries.py.in index 407a0b0af..dc81da104 100644 --- a/python/scripts/process_libraries.py.in +++ b/python/scripts/process_libraries.py.in @@ -18,7 +18,7 @@ import shutil import subprocess import platform -user_specified_dirs = ['@OPENCV_DIRECTORY@', ] +user_specified_dirs = ['@OPENCV_DIRECTORY@', '@ORT_DIRECTORY@', ] def process_on_linux(current_dir): rpaths = ["$ORIGIN:$ORIGIN/libs"] diff --git a/python/setup.py b/python/setup.py index 23a51e6e1..d437aa483 100644 --- a/python/setup.py +++ b/python/setup.py @@ -63,6 +63,7 @@ setup_configs["CUDA_DIRECTORY"] = os.getenv("CUDA_DIRECTORY", setup_configs["LIBRARY_NAME"] = PACKAGE_NAME setup_configs["PY_LIBRARY_NAME"] = PACKAGE_NAME + "_main" setup_configs["OPENCV_DIRECTORY"] = os.getenv("OPENCV_DIRECTORY", "") +setup_configs["ORT_DIRECTORY"] = os.getenv("ORT_DIRECTORY", "") if setup_configs["WITH_GPU"] == "ON": wheel_name = "fastdeploy-gpu-python"