|
|
|
|
|
cmake_minimum_required(VERSION 3.10)
|
|
|
|
|
|
project(QGuideArith VERSION 1.0 LANGUAGES CXX)
|
|
|
|
|
|
|
|
|
|
|
|
# 启用 C++17
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
|
|
|
|
|
|
|
|
|
|
|
set(BUILD_ARITH_STUDIO TRUE) # 设置是否构建算法平台
|
|
|
|
|
|
|
|
|
|
|
|
set(BUILD_AI_ONNX_DETECT FALSE) # 设置是否基于ONNX构建AI识别模块
|
|
|
|
|
|
set(BUILD_AI_CUDA_DETECT FALSE) # 设置是否基于CUDA构建AI识别模块
|
|
|
|
|
|
|
|
|
|
|
|
set(BUILD_AI_TRACK FALSE) # 设置是否构建AI跟踪模块
|
|
|
|
|
|
|
|
|
|
|
|
# ###########################架构优化开关#####################################
|
|
|
|
|
|
MESSAGE(STATUS "********************************************")
|
|
|
|
|
|
|
|
|
|
|
|
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
|
|
|
|
|
|
add_definitions(-DNEON)
|
|
|
|
|
|
add_definitions(-DUSE_CPUBIND)
|
|
|
|
|
|
SET(CMAKE_BUILD_TYPE "Release")
|
|
|
|
|
|
MESSAGE(STATUS "build on aarch64+++++++++++++++++++++++,add_definitions -DARM64")
|
|
|
|
|
|
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "AMD64" OR "64")
|
|
|
|
|
|
message(STATUS "this is AMD64 cpu **")
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
MESSAGE(STATUS "********************************************")
|
|
|
|
|
|
|
|
|
|
|
|
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
|
|
|
|
|
|
|
|
|
|
|
# 设置源码路径宏
|
|
|
|
|
|
set(SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
|
|
|
|
|
|
|
|
# 将路径编码,便于各人模型文件的路径一致
|
|
|
|
|
|
add_definitions(-DSOURCE_PATH=\"${SOURCE_PATH}\")
|
|
|
|
|
|
|
|
|
|
|
|
# ##########################全局配置##############################
|
|
|
|
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
|
|
|
|
|
|
|
# set(CMAKE_SKIP_BUILD_RPATH ON)
|
|
|
|
|
|
|
|
|
|
|
|
# 为win下使用vs编译器强制启用 UTF-8 编码
|
|
|
|
|
|
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")
|
|
|
|
|
|
|
|
|
|
|
|
# 强制编译器检查类型问题
|
|
|
|
|
|
# add_compile_options(-Werror)
|
|
|
|
|
|
# add_compile_options(-Wreturn-type)
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-Werror,-Bsymbolic")
|
|
|
|
|
|
|
|
|
|
|
|
# 设置全局编译选项
|
|
|
|
|
|
|
|
|
|
|
|
# 开启单元测试:算法模块单元测试
|
|
|
|
|
|
ENABLE_TESTING()
|
|
|
|
|
|
|
|
|
|
|
|
# ########################## 第三方库 ##############################
|
|
|
|
|
|
# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")
|
|
|
|
|
|
|
|
|
|
|
|
# opencv + TensorRT
|
|
|
|
|
|
IF(WIN32)
|
|
|
|
|
|
set(OpenCV_DIR "C:/opencv/build/x64/vc15/lib")
|
|
|
|
|
|
set(TRT_DIR "D:/TensorRT/TensorRT7")
|
|
|
|
|
|
ELSE(WIN32)
|
|
|
|
|
|
set(OpenCV_DIR "/home/wcw/opencv-3.4.16/install/share/OpenCV")
|
|
|
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
|
|
|
|
|
|
find_package(OpenCV REQUIRED)
|
|
|
|
|
|
|
|
|
|
|
|
if(OpenCV_VERSION VERSION_LESS "4.6")
|
|
|
|
|
|
add_definitions(-DOPENCV_LEGACY)
|
|
|
|
|
|
message(STATUS "OPENCV_LEGACY")
|
|
|
|
|
|
else()
|
|
|
|
|
|
add_definitions(-DOPENCV_MODERN)
|
|
|
|
|
|
message(STATUS "OPENCV_MODERN")
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
# 全局包含opencv
|
|
|
|
|
|
include_directories(${OpenCV_INCLUDE_DIRS})
|
|
|
|
|
|
|
|
|
|
|
|
# 链接必要的opencv库
|
|
|
|
|
|
SET(${OpenCV_lib_use} opencv_core)
|
|
|
|
|
|
|
|
|
|
|
|
# ########################## AI ONNX支持库配置 ###########################
|
|
|
|
|
|
IF(BUILD_AI_ONNX_DETECT)
|
|
|
|
|
|
add_definitions(-DENABLE_AI_ONNX_DETECT)
|
|
|
|
|
|
SET(Arith_AIDET_DIR AIDetector/x86_onnx) # AI识别库
|
|
|
|
|
|
SET(Arith_AIDET_SRC_DIR ${Arith_AIDET_DIR}/src)
|
|
|
|
|
|
|
|
|
|
|
|
IF(WIN32)
|
|
|
|
|
|
set(LIB_Arith_AIDET_NAME libAIDetector)
|
|
|
|
|
|
ELSE(WIN32)
|
|
|
|
|
|
set(LIB_Arith_AIDET_NAME AIDetector)
|
|
|
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
|
|
|
|
|
|
add_subdirectory(${Arith_AIDET_DIR})
|
|
|
|
|
|
ENDIF()
|
|
|
|
|
|
|
|
|
|
|
|
# ########################## AI CUDA支持库配置 ##########################
|
|
|
|
|
|
IF(BUILD_AI_CUDA_DETECT)
|
|
|
|
|
|
add_definitions(-DENABLE_AI_CUDA_DETECT)
|
|
|
|
|
|
SET(Arith_AIDET_DIR AIDetector/x86_cuda) # AI识别库
|
|
|
|
|
|
SET(Arith_AIDET_SRC_DIR ${Arith_AIDET_DIR}/src)
|
|
|
|
|
|
|
|
|
|
|
|
IF(WIN32)
|
|
|
|
|
|
set(LIB_Arith_AIDET_NAME libAIDetector)
|
|
|
|
|
|
ELSE(WIN32)
|
|
|
|
|
|
set(LIB_Arith_AIDET_NAME AIDetector)
|
|
|
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
|
|
|
|
|
|
add_subdirectory(${Arith_AIDET_DIR})
|
|
|
|
|
|
ENDIF()
|
|
|
|
|
|
|
|
|
|
|
|
# ########################## AI跟踪支持库配置 ###########################
|
|
|
|
|
|
IF(BUILD_AI_TRACK)
|
|
|
|
|
|
add_definitions(-DENABLE_AI_TRACK)
|
|
|
|
|
|
SET(Arith_AITRACK_DIR AITracker/x86) # AI跟踪库
|
|
|
|
|
|
SET(Arith_AITRACK_SRC_DIR ${Arith_AITRACK_DIR}/src)
|
|
|
|
|
|
|
|
|
|
|
|
IF(WIN32)
|
|
|
|
|
|
set(LIB_Arith_AITRK_NAME libAITracker)
|
|
|
|
|
|
ELSE(WIN32)
|
|
|
|
|
|
set(LIB_Arith_AITRK_NAME AITracker)
|
|
|
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
|
|
|
|
|
|
add_subdirectory(${Arith_AITRACK_DIR})
|
|
|
|
|
|
ENDIF()
|
|
|
|
|
|
|
|
|
|
|
|
# ########################## 算法库配置 ##############################
|
|
|
|
|
|
SET(ArithDIR NeoTracker)
|
|
|
|
|
|
SET(ArithSrcDIR ${ArithDIR}/src)
|
|
|
|
|
|
SET(SVMmodelsDIR ${ArithSrcDIR}/SVM/models)
|
|
|
|
|
|
# 设置算法库目录
|
|
|
|
|
|
IF(WIN32)
|
|
|
|
|
|
set(LIB_TRACKER libGuideTracker)
|
|
|
|
|
|
ELSE(WIN32)
|
|
|
|
|
|
set(LIB_TRACKER GuideTracker)
|
|
|
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
|
|
|
|
|
|
# 添加算法子目录
|
|
|
|
|
|
add_subdirectory(${ArithDIR})
|
|
|
|
|
|
|
|
|
|
|
|
IF(BUILD_ARITH_STUDIO)
|
|
|
|
|
|
# ########################## Qt环境 ##############################
|
|
|
|
|
|
IF(WIN32)
|
|
|
|
|
|
set(CMAKE_PREFIX_PATH "D:/Qt/5.15.2/msvc2019_64")
|
|
|
|
|
|
ELSE(WIN32)
|
|
|
|
|
|
set(CMAKE_PREFIX_PATH "/home/wang/Qt/5.15.2/gcc_64")
|
|
|
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
|
|
|
|
|
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools)
|
|
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools)
|
|
|
|
|
|
find_package(Qt5 REQUIRED COMPONENTS PrintSupport)
|
|
|
|
|
|
set(TS_FILES QGuideArith_zh_CN.ts)
|
|
|
|
|
|
|
|
|
|
|
|
set(CMAKE_AUTOUIC ON)
|
|
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
|
|
|
|
set(CMAKE_AUTORCC ON)
|
|
|
|
|
|
|
|
|
|
|
|
# 引入算法头文件
|
|
|
|
|
|
include_directories(${ArithSrcDIR})
|
|
|
|
|
|
include_directories(${ArithSrcDIR2})
|
|
|
|
|
|
include_directories(${ArithSrcDIR3})
|
|
|
|
|
|
include_directories(${ArithLogSrcDIR})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
include_directories(${Arith_AIDET_SRC_DIR})
|
|
|
|
|
|
include_directories(${Arith_AITRACK_SRC_DIR})
|
|
|
|
|
|
include_directories(${Arith_EXTTLD_SRC_DIR})
|
|
|
|
|
|
|
|
|
|
|
|
# 算法平台源文件
|
|
|
|
|
|
SET(QGuideArith_DIR ${CMAKE_SOURCE_DIR}/QGuideArithStudio/src)
|
|
|
|
|
|
|
|
|
|
|
|
# 包含本地路径,否则qt提升类报错
|
|
|
|
|
|
include_directories(${QGuideArith_DIR})
|
|
|
|
|
|
|
|
|
|
|
|
# 日志:SPDLOG
|
|
|
|
|
|
# include_directories(${CMAKE_SOURCE_DIR}/3rdParty)
|
|
|
|
|
|
FILE(GLOB PROJECT_SOURCES ${QGuideArith_DIR}/*.cpp ${QGuideArith_DIR}/*.h
|
|
|
|
|
|
${QGuideArith_DIR}/*.ui
|
|
|
|
|
|
${QGuideArith_DIR}/*.qrc
|
|
|
|
|
|
${QGuideArith_DIR}/*.rc
|
|
|
|
|
|
${CMAKE_SOURCE_DIR}/QGuideArithStudio/src/Project/*.cpp
|
|
|
|
|
|
${TS_FILES})
|
|
|
|
|
|
|
|
|
|
|
|
# 生成可执行文件
|
|
|
|
|
|
add_executable(QGuideArith ${PROJECT_SOURCES})
|
|
|
|
|
|
|
|
|
|
|
|
# 可执行文件输出路径
|
|
|
|
|
|
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/Bin)
|
|
|
|
|
|
|
|
|
|
|
|
# 关闭控制台
|
|
|
|
|
|
set_target_properties(QGuideArith PROPERTIES WIN32_EXECUTABLE TRUE)
|
|
|
|
|
|
|
|
|
|
|
|
# 链接模块
|
|
|
|
|
|
target_link_libraries(QGuideArith PRIVATE
|
|
|
|
|
|
${LIB_TRACKER} # 标准新跟踪器NeoTracker
|
|
|
|
|
|
${LIB_Arith_AIDET_NAME} # ai检测
|
|
|
|
|
|
${LIB_Arith_AITRK_NAME} # ai跟踪
|
|
|
|
|
|
${OpenCV_LIBS} # opencv
|
|
|
|
|
|
Qt${QT_VERSION_MAJOR}::Core
|
|
|
|
|
|
Qt${QT_VERSION_MAJOR}::Gui
|
|
|
|
|
|
Qt${QT_VERSION_MAJOR}::Widgets
|
|
|
|
|
|
Qt${QT_VERSION_MAJOR}::PrintSupport
|
|
|
|
|
|
)
|
|
|
|
|
|
ENDIF(BUILD_ARITH_STUDIO)
|
|
|
|
|
|
configure_file(${SVMmodelsDIR}/scaled_fly_bird_train.model ${EXECUTABLE_OUTPUT_PATH}/scaled_fly_bird_train.model COPYONLY)
|
|
|
|
|
|
|