Add some lib directories compiler option (#255)

* Add OPENCV_DIRECTORY option to provide the ability to specify the installed opecv lib pat

* Use find_package for opencv in windows, mac and linux

* Fix opencv cmake

* Fix python lib rpath setting

* fix mac python package

* Add some promt when use different opencv lib

* add status message

* Fix the backslash

* Fix python package user defined libs

* Fix windows python process libs

* Add windows lib set path
This commit is contained in:
Jack Zhou
2022-09-21 13:25:56 +08:00
committed by GitHub
parent addce837bc
commit e7f741292e
6 changed files with 83 additions and 155 deletions

View File

@@ -50,9 +50,10 @@ 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)
option(OPENCV_DIRECTORY "User can specify the installed opencv 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)
# option(ENABLE_OPENCV_CUDA "Whether to enable opencv with cuda, this will allow process image with GPU." OFF)
option(ENABLE_DEBUG "Whether to enable print debug information, this may reduce performance." OFF)
# Whether to build fastdeply with vision/text/... examples, only for testings.
@@ -242,9 +243,17 @@ if(ENABLE_VISION)
list(APPEND DEPEND_LIBS yaml-cpp)
list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_VISION_SRCS})
include_directories(${PROJECT_SOURCE_DIR}/third_party/yaml-cpp/include)
if (OPENCV_DIRECTORY)
message(STATUS "Use the opencv lib specified by user. The OpenCV path: ${OPENCV_DIRECTORY}")
STRING(REGEX REPLACE "\\\\" "/" OPENCV_DIRECTORY ${OPENCV_DIRECTORY})
find_package(OpenCV REQUIRED PATHS ${OPENCV_DIRECTORY})
list(APPEND DEPEND_LIBS ${OpenCV_LIBS})
include_directories(${OpenCV_INCLUDE_DIRS})
else()
message(STATUS "Use the default opencv lib.")
include(${PROJECT_SOURCE_DIR}/cmake/opencv.cmake)
list(APPEND DEPEND_LIBS ${OpenCV_LIBS})
endif()
if(ENABLE_VISION_VISUALIZE)
add_definitions(-DENABLE_VISION_VISUALIZE)
endif()
@@ -263,6 +272,7 @@ endif()
configure_file(${PROJECT_SOURCE_DIR}/FastDeploy.cmake.in ${PROJECT_SOURCE_DIR}/FastDeploy.cmake @ONLY)
configure_file(${PROJECT_SOURCE_DIR}/python/fastdeploy/c_lib_wrap.py.in ${PROJECT_SOURCE_DIR}/python/fastdeploy/c_lib_wrap.py)
configure_file(${PROJECT_SOURCE_DIR}/python/scripts/process_libraries.py.in ${PROJECT_SOURCE_DIR}/python/scripts/process_libraries.py)
list(REMOVE_ITEM ALL_DEPLOY_SRCS ${DEPLOY_PYBIND_SRCS})

View File

@@ -10,8 +10,9 @@ set(ENABLE_TRT_BACKEND @ENABLE_TRT_BACKEND@)
set(ENABLE_PADDLE_FRONTEND @ENABLE_PADDLE_FRONTEND@)
set(ENABLE_VISION @ENABLE_VISION@)
set(ENABLE_TEXT @ENABLE_TEXT@)
set(ENABLE_OPENCV_CUDA @ENABLE_OPENCV_CUDA@)
# set(ENABLE_OPENCV_CUDA @ENABLE_OPENCV_CUDA@)
set(LIBRARY_NAME @LIBRARY_NAME@)
set(OPENCV_DIRECTORY @OPENCV_DIRECTORY@)
set(FASTDEPLOY_LIBS "")
set(FASTDEPLOY_INCS "")
@@ -76,26 +77,13 @@ if(WITH_GPU)
endif()
if(ENABLE_VISION)
if(WIN32)
set(OpenCV_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/opencv-win-x64-3.4.16/build)
set(OpenCV_DIR @OpenCV_DIR@)
if (OPENCV_DIRECTORY)
set(OpenCV_DIR ${OPENCV_DIRECTORY})
endif()
find_package(OpenCV REQUIRED PATHS ${OpenCV_DIR})
list(APPEND FASTDEPLOY_INCS ${OpenCV_INCLUDE_DIRS})
list(APPEND FASTDEPLOY_LIBS ${OpenCV_LIBS})
else()
find_library(OPENCV_CORE_LIB opencv_core ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/opencv/lib NO_DEFAULT_PATH)
find_library(OPENCV_HIGHGUI_LIB opencv_highgui ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/opencv/lib NO_DEFAULT_PATH)
find_library(OPENCV_IMGPROC_LIB opencv_imgproc ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/opencv/lib NO_DEFAULT_PATH)
find_library(OPENCV_IMGCODESC_LIB opencv_imgcodecs ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/opencv/lib NO_DEFAULT_PATH)
list(APPEND FASTDEPLOY_LIBS ${OPENCV_CORE_LIB} ${OPENCV_HIGHGUI_LIB} ${OPENCV_IMGPROC_LIB} ${OPENCV_IMGCODESC_LIB})
list(APPEND FASTDEPLOY_INCS ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/opencv/include)
if(ENABLE_OPENCV_CUDA)
find_library(OPENCV_CUDAARITHM_LIB opencv_core ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/opencv/lib NO_DEFAULT_PATH)
find_library(OPENCV_CUDAIMGPROC_LIB opencv_core ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/opencv/lib NO_DEFAULT_PATH)
find_library(OPENCV_CUDAWARPING_LIB opencv_core ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/opencv/lib NO_DEFAULT_PATH)
list(APPEND FASTDEPLOY_LIBS ${OPENCV_CUDAARITHM_LIB} ${OPENCV_CUDAIMGPROC_LIB} ${OPENCV_CUDAWARPING_LIB})
endif()
endif()
endif()
if (ENABLE_TEXT)

View File

@@ -14,125 +14,39 @@
set(OPENCV_INSTALL_DIR ${THIRD_PARTY_PATH}/install/)
set(OPENCV_URL_PREFIX "https://bj.bcebos.com/paddle2onnx/libs")
set(COMPRESSED_SUFFIX ".tgz")
if(WIN32)
set(OPENCV_URL https://bj.bcebos.com/paddle2onnx/libs/opencv-win-x64-3.4.16.zip)
download_and_decompress(${OPENCV_URL} ${CMAKE_CURRENT_BINARY_DIR}/opencv-win-x64-3.4.16.zip ${THIRD_PARTY_PATH}/install/)
set(OpenCV_DIR ${THIRD_PARTY_PATH}/install/opencv-win-x64-3.4.16/build)
find_package(OpenCV REQUIRED PATHS ${OpenCV_DIR})
include_directories(${OpenCV_INCLUDE_DIRS})
list(APPEND DEPEND_LIBS ${OpenCV_LIBS})
else()
include(ExternalProject)
set(OPENCV_PROJECT "extern_opencv")
set(OPENCV_PREFIX_DIR ${THIRD_PARTY_PATH}/opencv)
set(OPENCV_SOURCE_DIR
${THIRD_PARTY_PATH}/opencv/src/${OPENCV_PROJECT})
set(OPENCV_INSTALL_DIR ${THIRD_PARTY_PATH}/install/opencv)
set(OPENCV_INC_DIR
"${OPENCV_INSTALL_DIR}/include/"
CACHE PATH "opencv include directory." FORCE)
set(OPENCV_LIB_DIR
"${OPENCV_INSTALL_DIR}/lib"
CACHE PATH "opencv lib directory." FORCE)
set(CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}" "${OPENCV_LIB_DIR}")
if(WIN32)
message(FATAL_ERROR "NOT SUPPORT WINDOWS NOW, OPENCV")
set(OPENCV_LIB "opencv-win-x64-3.4.16")
set(COMPRESSED_SUFFIX ".zip")
elseif(APPLE)
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm64")
set(OPENCV_URL "https://bj.bcebos.com/paddle2onnx/libs/opencv-osx-arm64-3.4.16.tgz")
set(OPENCV_LIB "opencv-osx-arm64-3.4.16")
else()
set(OPENCV_URL "https://bj.bcebos.com/paddle2onnx/libs/opencv-osx-x86_64-3.4.16.tgz")
set(OPENCV_LIB "opencv-osx-x86_64-3.4.16")
endif()
else()
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
set(OPENCV_URL "https://bj.bcebos.com/paddle2onnx/libs/opencv-linux-aarch64-3.4.14.tgz")
set(OPENCV_LIB "opencv-linux-aarch64-3.4.14")
else()
set(OPENCV_URL "https://bj.bcebos.com/paddle2onnx/libs/opencv-linux-x64-3.4.16.tgz")
set(OPENCV_LIB "opencv-linux-x64-3.4.16")
endif()
if(ENABLE_OPENCV_CUDA)
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
message(FATAL_ERROR "Cannot set ENABLE_OPENCV_CUDA=ON while in linux-aarch64 platform.")
endif()
set(OPENCV_URL "https://bj.bcebos.com/paddle2onnx/libs/opencv-linux-x64-gpu-3.4.16.tgz")
set(OPENCV_LIB "opencv-linux-x64-gpu-3.4.16")
endif()
endif()
include_directories(${OPENCV_INC_DIR}
)# For OPENCV code to include internal headers.
set(OPENCV_URL ${OPENCV_URL_PREFIX}/${OPENCV_LIB}${COMPRESSED_SUFFIX})
download_and_decompress(${OPENCV_URL} ${CMAKE_CURRENT_BINARY_DIR}/${OPENCV_LIB}${COMPRESSED_SUFFIX} ${THIRD_PARTY_PATH}/install/)
set(OPENCV_SOURCE_LIB ${OPENCV_SOURCE_DIR}/lib/)
if(WIN32)
message(FATAL_ERROR "NOT SUPPORT WEINDOWS, OPENCV")
elseif(APPLE)
set(OPENCV_CORE_LIB ${OPENCV_INSTALL_DIR}/lib/libopencv_core.dylib)
set(OPENCV_HIGHGUI_LIB ${OPENCV_INSTALL_DIR}/lib/libopencv_highgui.dylib)
set(OPENCV_IMGPROC_LIB ${OPENCV_INSTALL_DIR}/lib/libopencv_imgproc.dylib)
set(OPENCV_IMGCODESC_LIB ${OPENCV_INSTALL_DIR}/lib/libopencv_imgcodecs.dylib)
else()
set(OPENCV_SOURCE_LIB ${OPENCV_SOURCE_DIR}/lib64)
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
set(OPENCV_SOURCE_LIB ${OPENCV_SOURCE_DIR}/lib)
endif()
set(OPENCV_CORE_LIB ${OPENCV_INSTALL_DIR}/lib/libopencv_core.so)
set(OPENCV_HIGHGUI_LIB ${OPENCV_INSTALL_DIR}/lib/libopencv_highgui.so)
set(OPENCV_IMGPROC_LIB ${OPENCV_INSTALL_DIR}/lib/libopencv_imgproc.so)
set(OPENCV_IMGCODESC_LIB ${OPENCV_INSTALL_DIR}/lib/libopencv_imgcodecs.so)
set(OPENCV_CUDAARITHM_LIB ${OPENCV_INSTALL_DIR}/lib/libopencv_cudaarithm.so)
set(OPENCV_CUDAIMGPROC_LIB ${OPENCV_INSTALL_DIR}/lib/libopencv_cudaimgproc.so)
set(OPENCV_CUDAWARPING_LIB ${OPENCV_INSTALL_DIR}/lib/libopencv_cudawarping.so)
set(OpenCV_DIR ${THIRD_PARTY_PATH}/install/${OPENCV_LIB}/)
if (WIN32)
set(OpenCV_DIR ${OpenCV_DIR}/build/)
endif()
if(WIN32)
message(FATAL_ERROR "NOT SUPPORT WINDOWS, OPENCV")
else()
ExternalProject_Add(
${OPENCV_PROJECT}
${EXTERNAL_PROJECT_LOG_ARGS}
URL ${OPENCV_URL}
PREFIX ${OPENCV_PREFIX_DIR}
DOWNLOAD_NO_PROGRESS 1
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
UPDATE_COMMAND ""
INSTALL_COMMAND
${CMAKE_COMMAND} -E remove_directory ${OPENCV_INSTALL_DIR} &&
${CMAKE_COMMAND} -E make_directory ${OPENCV_INSTALL_DIR} &&
${CMAKE_COMMAND} -E rename ${OPENCV_SOURCE_LIB} ${OPENCV_INSTALL_DIR}/lib &&
${CMAKE_COMMAND} -E copy_directory ${OPENCV_SOURCE_DIR}/include/
${OPENCV_INC_DIR}
BUILD_BYPRODUCTS ${OPENCV_LIB})
endif()
add_library(external_opencv_core STATIC IMPORTED GLOBAL)
set_property(TARGET external_opencv_core PROPERTY IMPORTED_LOCATION ${OPENCV_CORE_LIB})
add_library(external_opencv_highgui STATIC IMPORTED GLOBAL)
set_property(TARGET external_opencv_highgui PROPERTY IMPORTED_LOCATION ${OPENCV_HIGHGUI_LIB})
add_library(external_opencv_imgproc STATIC IMPORTED GLOBAL)
set_property(TARGET external_opencv_imgproc PROPERTY IMPORTED_LOCATION ${OPENCV_IMGPROC_LIB})
add_library(external_opencv_imgcodesc STATIC IMPORTED GLOBAL)
set_property(TARGET external_opencv_imgcodesc PROPERTY IMPORTED_LOCATION ${OPENCV_IMGCODESC_LIB})
add_dependencies(external_opencv_core ${OPENCV_PROJECT})
add_dependencies(external_opencv_highgui ${OPENCV_PROJECT})
add_dependencies(external_opencv_imgproc ${OPENCV_PROJECT})
add_dependencies(external_opencv_imgcodesc ${OPENCV_PROJECT})
list(APPEND DEPEND_LIBS external_opencv_core external_opencv_highgui external_opencv_imgproc external_opencv_imgcodesc)
if(ENABLE_OPENCV_CUDA)
add_library(extern_opencv_cudawarping STATIC IMPORTED GLOBAL)
set_property(TARGET extern_opencv_cudawarping PROPERTY IMPORTED_LOCATION ${OPENCV_CUDAWARPING_LIB})
add_dependencies(extern_opencv_cudawarping ${OPENCV_PROJECT})
add_library(extern_opencv_cudaarithm STATIC IMPORTED GLOBAL)
set_property(TARGET extern_opencv_cudaarithm PROPERTY IMPORTED_LOCATION ${OPENCV_CUDAARITHM_LIB})
add_dependencies(extern_opencv_cudaarithm ${OPENCV_PROJECT})
add_library(extern_opencv_cudaimgproc STATIC IMPORTED GLOBAL)
set_property(TARGET extern_opencv_cudaimgproc PROPERTY IMPORTED_LOCATION ${OPENCV_CUDAIMGPROC_LIB})
add_dependencies(extern_opencv_cudaimgproc ${OPENCV_PROJECT})
list(APPEND DEPEND_LIBS extern_opencv_cudawarping extern_opencv_cudaarithm extern_opencv_cudaimgproc)
endif()
endif(WIN32)
find_package(OpenCV REQUIRED PATHS ${OpenCV_DIR})
include_directories(${OpenCV_INCLUDE_DIRS})
list(APPEND DEPEND_LIBS ${OpenCV_LIBS})

View File

@@ -16,6 +16,8 @@ import logging
import os
import sys
user_specified_dirs = ['@OPENCV_DIRECTORY@', ]
def is_built_with_gpu() -> bool:
return True if "@WITH_GPU@" == "ON" else False
@@ -143,8 +145,10 @@ if os.name == "nt":
current_path = os.path.abspath(__file__)
dirname = os.path.dirname(current_path)
third_libs_dir = os.path.join(dirname, "libs")
add_dll_search_dir(third_libs_dir)
for root, dirs, filenames in os.walk(third_libs_dir):
all_dirs = user_specified_dirs + [third_libs_dir]
for dir in all_dirs:
add_dll_search_dir(dir)
for root, dirs, filenames in os.walk(dir):
for d in dirs:
if d == "lib" or d == "bin":
add_dll_search_dir(os.path.join(dirname, root, d))

View File

@@ -18,6 +18,7 @@ import shutil
import subprocess
import platform
user_specified_dirs = ['@OPENCV_DIRECTORY@', ]
def process_on_linux(current_dir):
rpaths = ["$ORIGIN:$ORIGIN/libs"]
@@ -31,9 +32,11 @@ def process_on_linux(current_dir):
fd_libs.append(filename)
third_libs_path = os.path.join(libs_path, "third_libs")
for root, dirs, files in os.walk(third_libs_path):
all_libs_paths = [third_libs_path] + user_specified_dirs
for path in all_libs_paths:
for root, dirs, files in os.walk(path):
for d in dirs:
if d != "lib":
if d not in ["lib", "lib64"]:
continue
rel_path = os.path.relpath(os.path.join(root, d), libs_path)
rpath = "$ORIGIN/" + rel_path
@@ -66,9 +69,11 @@ def process_on_mac(current_dir):
commands = list()
third_libs_path = os.path.join(libs_path, "third_libs")
for root, dirs, files in os.walk(third_libs_path):
all_libs_paths = [third_libs_path] + user_specified_dirs
for path in all_libs_paths:
for root, dirs, files in os.walk(path):
for d in dirs:
if d != "lib":
if d not in ["lib", "lib64"]:
continue
rel_path = rel_path = os.path.relpath(os.path.join(root, d), libs_path)
rpath = "$loader_path/" + rel_path
@@ -136,6 +141,7 @@ def process_libraries(current_dir):
package_data.append(
os.path.relpath(f, os.path.join(current_dir,
"fastdeploy")))
return package_data
filters = [".vcxproj", ".png", ".java", ".h", ".cc", ".cpp", ".hpp"]
@@ -145,7 +151,12 @@ def process_libraries(current_dir):
if f.count(flt) > 0:
remain = False
filename = os.path.split(f)[-1]
if filename in ["libnvinfer_plugin.so", "libnvinfer_plugin.so.8.4.1", "libnvinfer.so", "libnvinfer.so.8.4.1", "libnvonnxparser.so", "libnvonnxparser.so.8.4.1", "libnvparsers.so", "libnvparsers.so.8.4.1"]:
if filename in [
"libnvinfer_plugin.so", "libnvinfer_plugin.so.8.4.1",
"libnvinfer.so", "libnvinfer.so.8.4.1", "libnvonnxparser.so",
"libnvonnxparser.so.8.4.1", "libnvparsers.so",
"libnvparsers.so.8.4.1"
]:
continue
if remain:
package_data.append(

View File

@@ -62,6 +62,7 @@ setup_configs["CUDA_DIRECTORY"] = os.getenv("CUDA_DIRECTORY",
"/usr/local/cuda")
setup_configs["LIBRARY_NAME"] = PACKAGE_NAME
setup_configs["PY_LIBRARY_NAME"] = PACKAGE_NAME + "_main"
setup_configs["OPENCV_DIRECTORY"] = os.getenv("OPENCV_DIRECTORY", "")
if setup_configs["WITH_GPU"] == "ON":
wheel_name = "fastdeploy-gpu-python"
@@ -327,8 +328,7 @@ ext_modules = [
# no need to do fancy stuff so far
if PACKAGE_NAME != "fastdeploy":
packages = setuptools.find_packages(
exclude=['fastdeploy*', 'scripts'])
packages = setuptools.find_packages(exclude=['fastdeploy*', 'scripts'])
else:
packages = setuptools.find_packages(exclude=['scripts'])
@@ -353,7 +353,8 @@ if sys.argv[1] == "install" or sys.argv[1] == "bdist_wheel":
shutil.copy(
os.path.join(TOP_DIR, "LICENSE"), os.path.join(TOP_DIR, PACKAGE_NAME))
if not os.path.exists(
os.path.join(TOP_DIR, "python", "fastdeploy", "libs", "third_libs")):
os.path.join(TOP_DIR, "python", "fastdeploy", "libs",
"third_libs")):
print(
"Didn't detect path: fastdeploy/libs/third_libs exist, please execute `python setup.py build` first"
)