cmake_minimum_required(VERSION 3.10)
project(SmartVideoSurveillance VERSION 1.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 查找OpenCV库
find_package(OpenCV REQUIRED
COMPONENTS core highgui videoio video objdetect imgproc dnn
)
if(OpenCV_FOUND)
include_directories(${OpenCV_INCLUDE_DIRS})
message(STATUS "OpenCV version: ${OpenCV_VERSION}")
endif()
# 查找FFmpeg库
find_package(PkgConfig REQUIRED)
pkg_check_modules(FFMPEG REQUIRED libavcodec libavformat libavutil libswscale)
if(FFMPEG_FOUND)
include_directories(${FFMPEG_INCLUDE_DIRS})
link_directories(${FFMPEG_LIBRARY_DIRS})
endif()
# 配置TensorRT (可选)
find_package(TensorRT QUIET)
if(TensorRT_FOUND)
include_directories(${TensorRT_INCLUDE_DIRS})
message(STATUS "TensorRT version: ${TensorRT_VERSION}")
endif()
# 配置ONNX Runtime (可选)
find_package(ONNXRuntime QUIET)
if(ONNXRuntime_FOUND)
include_directories(${ONNXRuntime_INCLUDE_DIRS})
endif()
# 启用多线程支持
find_package(Threads REQUIRED)
# 检查CUDA支持
option(ENABLE_CUDA "Enable CUDA acceleration" OFF)
if(ENABLE_CUDA)
find_package(CUDA REQUIRED)
enable_language(CUDA)
set(CMAKE_CUDA_STANDARD 17)
message(STATUS "CUDA version: ${CUDA_VERSION}")
endif()
# 添加可执行文件
add_executable(smart_surveillance
src/main.cpp
src/video_processor.cpp
src/motion_detector.cpp
src/object_detector.cpp
)
# 链接库
target_link_libraries(smart_surveillance
PRIVATE
${OpenCV_LIBS}
${FFMPEG_LIBRARIES}
Threads::Threads
)
if(TensorRT_FOUND)
target_link_libraries(smart_surveillance PRIVATE nvinfer)
endif()
if(ENABLE_CUDA)
target_link_libraries(smart_surveillance PRIVATE ${CUDA_LIBRARIES})
endif()
# 安装可执行文件
install(TARGETS smart_surveillance
RUNTIME DESTINATION bin
)
# 安装配置文件
install(DIRECTORY config/
DESTINATION etc/smart_surveillance
)
# 安装模型文件
install(DIRECTORY models/
DESTINATION share/smart_surveillance/models
)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR armv7l) # 针对ARM平台
if(CMAKE_BUILD_TYPE STREQUAL "Release")
add_compile_options(-O3 -march=native -ffast-math)
endif()
find_package(spdlog QUIET)
if(spdlog_FOUND)
target_link_libraries(smart_surveillance PRIVATE spdlog::spdlog)
endif()
enable_testing()
find_package(GTest REQUIRED)
add_subdirectory(tests)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/src/version.h.in
${CMAKE_CURRENT_BINARY_DIR}/version.h
)
OpenCV找不到问题:
set(OpenCV_DIR "/path/to/opencv/build")
FFmpeg链接问题:
set(FFMPEG_LIBRARIES avcodec avformat avutil swscale)
CUDA兼容性问题:
CUDA_ARCHITECTURES
指定计算能力内存泄漏检测:
option(ENABLE_ASAN "Enable Address Sanitizer" OFF)
if(ENABLE_ASAN)
add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
add_link_options(-fsanitize=address)
endif()
通过以上CMake配置,您可以构建一个功能完善的智能视频监控应用程序,支持视频处理、对象检测、运动检测等功能,并能充分利用硬件加速能力。