Initial commit: scene-actor-extraction pipeline
Source (KPN++ pipeline nodes, ArcFace embedders, SCRFD/YuNet detectors, gallery builder), build scripts, and eval artifacts. - external/KPN as a git submodule (gitea.tourolle.paris/dtourolle/KPN) - ONNX models tracked via Git LFS (models/*.onnx) - generated outputs, TensorRT engines, reference repos, and media ignored
This commit is contained in:
+148
@@ -0,0 +1,148 @@
|
||||
cmake_minimum_required(VERSION 3.21)
|
||||
project(scene_actor_extraction VERSION 0.1.0 LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
# ── Dependencies ──────────────────────────────────────────────────────────────
|
||||
|
||||
# KPN++ (pipeline backbone)
|
||||
set(KPN_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
||||
set(KPN_BUILD_PYTHON OFF CACHE BOOL "" FORCE)
|
||||
set(KPN_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
||||
option(SAE_WEB_DEBUG "Enable KPN web debug UI (localhost:9090)" OFF)
|
||||
if(SAE_WEB_DEBUG)
|
||||
set(KPN_WEB_DEBUG ON CACHE BOOL "" FORCE)
|
||||
endif()
|
||||
add_subdirectory(external/KPN)
|
||||
|
||||
# OpenCV (video decode, image ops, DNN inference, face detection)
|
||||
find_package(OpenCV 4 REQUIRED COMPONENTS
|
||||
core imgproc imgcodecs videoio dnn objdetect highgui)
|
||||
|
||||
# ONNX Runtime (SCRFD detector — cv::dnn cannot handle dynamic Shape nodes)
|
||||
find_library(ORT_LIB onnxruntime REQUIRED
|
||||
HINTS /usr/lib /usr/local/lib)
|
||||
find_path(ORT_INCLUDE onnxruntime_cxx_api.h
|
||||
PATH_SUFFIXES onnxruntime
|
||||
HINTS /usr/include /usr/local/include
|
||||
REQUIRED)
|
||||
add_library(onnxruntime UNKNOWN IMPORTED)
|
||||
set_target_properties(onnxruntime PROPERTIES
|
||||
IMPORTED_LOCATION "${ORT_LIB}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${ORT_INCLUDE}")
|
||||
message(STATUS "ONNX Runtime: ${ORT_LIB} headers: ${ORT_INCLUDE}")
|
||||
|
||||
# TensorRT + CUDA runtime (raw-TRT ArcFace embedder; activated by --arcface-engine).
|
||||
find_library(NVINFER_LIB nvinfer
|
||||
HINTS /usr/lib /usr/local/lib /opt/tensorrt/lib)
|
||||
find_path(NVINFER_INCLUDE NvInfer.h
|
||||
HINTS /usr/include /usr/local/include /opt/tensorrt/include)
|
||||
find_library(CUDART_LIB cudart
|
||||
HINTS /opt/cuda/lib64 /usr/local/cuda/lib64 /usr/lib)
|
||||
find_path(CUDART_INCLUDE cuda_runtime_api.h
|
||||
HINTS /opt/cuda/targets/x86_64-linux/include /opt/cuda/include
|
||||
/usr/local/cuda/include /usr/include)
|
||||
if(NOT (NVINFER_LIB AND NVINFER_INCLUDE AND CUDART_LIB AND CUDART_INCLUDE))
|
||||
message(FATAL_ERROR
|
||||
"TensorRT or CUDA runtime not found "
|
||||
"(nvinfer=${NVINFER_LIB} headers=${NVINFER_INCLUDE} "
|
||||
"cudart=${CUDART_LIB} headers=${CUDART_INCLUDE})")
|
||||
endif()
|
||||
add_library(trt_runtime INTERFACE)
|
||||
target_include_directories(trt_runtime INTERFACE
|
||||
"${NVINFER_INCLUDE}" "${CUDART_INCLUDE}")
|
||||
target_link_libraries(trt_runtime INTERFACE
|
||||
"${NVINFER_LIB}" "${CUDART_LIB}")
|
||||
message(STATUS "TensorRT: ${NVINFER_LIB} CUDA runtime: ${CUDART_LIB}")
|
||||
|
||||
# FFmpeg (NVDEC hardware video decode + swscale colour conversion)
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(AVFORMAT REQUIRED libavformat)
|
||||
pkg_check_modules(AVCODEC REQUIRED libavcodec)
|
||||
pkg_check_modules(AVUTIL REQUIRED libavutil)
|
||||
pkg_check_modules(SWSCALE REQUIRED libswscale)
|
||||
|
||||
add_library(ffmpeg_libs INTERFACE)
|
||||
target_compile_options(ffmpeg_libs INTERFACE
|
||||
${AVFORMAT_CFLAGS_OTHER} ${AVCODEC_CFLAGS_OTHER}
|
||||
${AVUTIL_CFLAGS_OTHER} ${SWSCALE_CFLAGS_OTHER})
|
||||
target_include_directories(ffmpeg_libs INTERFACE
|
||||
${AVFORMAT_INCLUDE_DIRS} ${AVCODEC_INCLUDE_DIRS}
|
||||
${AVUTIL_INCLUDE_DIRS} ${SWSCALE_INCLUDE_DIRS})
|
||||
target_link_libraries(ffmpeg_libs INTERFACE
|
||||
${AVFORMAT_LIBRARIES} ${AVCODEC_LIBRARIES}
|
||||
${AVUTIL_LIBRARIES} ${SWSCALE_LIBRARIES})
|
||||
message(STATUS "FFmpeg: avformat=${AVFORMAT_VERSION} avcodec=${AVCODEC_VERSION}")
|
||||
|
||||
# nlohmann/json (gallery + output serialisation)
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
nlohmann_json
|
||||
GIT_REPOSITORY https://github.com/nlohmann/json.git
|
||||
GIT_TAG v3.11.3
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_MakeAvailable(nlohmann_json)
|
||||
|
||||
# ── Model paths ───────────────────────────────────────────────────────────────
|
||||
set(SAE_MODELS_DIR "${CMAKE_SOURCE_DIR}/models"
|
||||
CACHE PATH "Directory containing ONNX model files")
|
||||
|
||||
# ── Shared library: gallery store ─────────────────────────────────────────────
|
||||
add_library(sae_gallery STATIC
|
||||
src/gallery/gallery_store.cpp
|
||||
src/gallery/gallery_builder.cpp
|
||||
)
|
||||
target_include_directories(sae_gallery PUBLIC src)
|
||||
target_link_libraries(sae_gallery PUBLIC
|
||||
kpn
|
||||
${OpenCV_LIBS}
|
||||
nlohmann_json::nlohmann_json
|
||||
onnxruntime
|
||||
trt_runtime
|
||||
ffmpeg_libs
|
||||
)
|
||||
target_compile_definitions(sae_gallery PUBLIC
|
||||
SAE_MODELS_DIR="${SAE_MODELS_DIR}"
|
||||
)
|
||||
|
||||
# ── embed_faces — image → embedding JSON (used by gallery builder scripts) ────
|
||||
add_executable(embed_faces src/embed_faces.cpp)
|
||||
target_link_libraries(embed_faces PRIVATE
|
||||
kpn
|
||||
${OpenCV_LIBS}
|
||||
nlohmann_json::nlohmann_json
|
||||
onnxruntime
|
||||
trt_runtime
|
||||
ffmpeg_libs
|
||||
)
|
||||
target_compile_definitions(embed_faces PRIVATE SAE_MODELS_DIR="${SAE_MODELS_DIR}")
|
||||
|
||||
# ── analyze — main analysis binary ───────────────────────────────────────────
|
||||
add_executable(scene_analyze src/main.cpp)
|
||||
target_link_libraries(scene_analyze PRIVATE sae_gallery)
|
||||
|
||||
# ── analyze_debug — same binary with debug frame/crop output ─────────────────
|
||||
add_executable(scene_analyze_debug src/main.cpp)
|
||||
target_link_libraries(scene_analyze_debug PRIVATE sae_gallery)
|
||||
target_compile_definitions(scene_analyze_debug PRIVATE SAE_DEBUG=1)
|
||||
|
||||
# ── scene_preview — live annotated display while analysing ───────────────────
|
||||
add_executable(scene_preview src/scene_preview.cpp)
|
||||
target_link_libraries(scene_preview PRIVATE sae_gallery)
|
||||
|
||||
# ── build_gallery — offline gallery construction tool ────────────────────────
|
||||
add_executable(build_gallery src/build_gallery.cpp)
|
||||
target_link_libraries(build_gallery PRIVATE sae_gallery)
|
||||
|
||||
# ── Optional: web debug UI for pipeline introspection ────────────────────────
|
||||
if(SAE_WEB_DEBUG)
|
||||
kpn_target_enable_web_debug(scene_analyze)
|
||||
kpn_target_enable_web_debug(scene_analyze_debug)
|
||||
kpn_target_enable_web_debug(scene_preview)
|
||||
endif()
|
||||
|
||||
message(STATUS "OpenCV ${OpenCV_VERSION} found")
|
||||
message(STATUS "Models dir: ${SAE_MODELS_DIR}")
|
||||
Reference in New Issue
Block a user