diff --git a/.gitignore b/.gitignore index 15e3d01..62c3c37 100644 --- a/.gitignore +++ b/.gitignore @@ -29,13 +29,7 @@ *.app # Hunter/polly -_logs/* -_builds/* -_install/* -_framework/* -_os/* -_archives/* -_assets/* +_*/ # Stored releases releases/* diff --git a/CMakeLists.txt b/CMakeLists.txt index 4730736..92ffc87 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,8 +61,8 @@ if(ACF_USE_DRISHTI_UPLOAD) ) endif() else() - set(ACF_HUNTER_GATE_URL "https://github.com/ruslo/hunter/archive/v0.21.19.tar.gz") - set(ACF_HUNTER_GATE_SHA1 "5ead1e069b437930d0de8a21824b20fb52b37b50") + set(ACF_HUNTER_GATE_URL "https://github.com/ruslo/hunter/archive/v0.22.8.tar.gz") + set(ACF_HUNTER_GATE_SHA1 "e7fe3f0b61b1b4844d440ec0a02ac73ddc5f0bb2") if(HUNTER_ENABLED AND NOT ACF_IS_REPO_BUILD) # DEPENDENCY: if(HUNTER_ENABLE): we are being used as a dependency from # another project and we will use the config.cmake from the parent project. @@ -94,7 +94,7 @@ endif() ################### # See https://github.com/hunter-packages/check_ci_tag when changing VERSION -project(acf VERSION 0.1.12) +project(acf VERSION 0.1.13) set(ACF_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}") diff --git a/cmake/Hunter/config.cmake b/cmake/Hunter/config.cmake index 8a0a5ee..7b1ab28 100644 --- a/cmake/Hunter/config.cmake +++ b/cmake/Hunter/config.cmake @@ -1,14 +1,8 @@ -# the oepncv protobuf isn't friendly to a lot of compilers, skip it by default -set(opencv_cmake_args - WITH_PROTOBUF=OFF - BUILD_PROTOBUF=OFF - BUILD_LIBPROTOBUF_FROM_SOURCES=NO - BUILD_opencv_dnn=OFF - - WITH_JASPER=OFF - BUILD_JASPER=OFF - ) -hunter_config(OpenCV VERSION ${HUNTER_OpenCV_VERSION} CMAKE_ARGS ${opencv_cmake_args}) +### aglet ### +set(aglet_cmake_args + AGLET_OPENGL_ES3=${ACF_OPENGL_ES3} +) +hunter_config(ogles_gpgpu VERSION ${HUNTER_ogles_gpgpu_VERSION} CMAKE_ARGS ${ogles_gpgpu_cmake_args}) ### ogles_gpgpu ### set(ogles_gpgpu_cmake_args @@ -17,4 +11,20 @@ set(ogles_gpgpu_cmake_args ) hunter_config(ogles_gpgpu VERSION ${HUNTER_ogles_gpgpu_VERSION} CMAKE_ARGS ${ogles_gpgpu_cmake_args}) +### opencv ### +set(opencv_cmake_args + BUILD_LIST=core,imgproc,videoio,highgui +) +hunter_config(OpenCV VERSION ${HUNTER_OpenCV_VERSION} CMAKE_ARGS ${opencv_cmake_args}) + +### ACF (GIT_SELF) : support relocatable package testing ### +set(acf_cmake_args + ACF_BUILD_TESTS=${ACF_BUILD_TESTS} + ACF_BUILD_EXAMPLES=${ACF_BUILD_EXAMPLES} + ACF_SERIALIZE_WITH_CVMATIO=${ACF_SERIALIZE_WITH_CVMATIO} + ACF_SERIALIZE_WITH_CEREAL=ON + ACF_BUILD_OGLES_GPGPU=${ACF_BUILD_OGLES_GPGPU} +) +hunter_config(acf GIT_SELF CMAKE_ARGS ${acf_cmake_args}) + diff --git a/drishti-upload b/drishti-upload index 488ea0b..b10026c 160000 --- a/drishti-upload +++ b/drishti-upload @@ -1 +1 @@ -Subproject commit 488ea0be3f48cb30b60391860f6ffd31b6b45f66 +Subproject commit b10026caa49ee8c3e3855fffcb1cbca777486fbc diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index d0207d0..d56160c 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -1,12 +1,62 @@ -############### -### cxxopts ### :: std::regex >= gcc 4.8 -############### -hunter_add_package(cxxopts) -find_package(cxxopts CONFIG REQUIRED) +if(NOT TARGET acf::acf) + + set(ACF_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/../..") + + cmake_minimum_required(VERSION 3.9) # CMAKE_INTERPROCEDURAL_OPTIMIZATION + + # https://docs.hunter.sh/en/latest/reference/user-variables.html#hunter-keep-package-sources + option(HUNTER_KEEP_PACKAGE_SOURCES "Keep installed package sources for debugging (caveat...)" OFF) + + list(APPEND CMAKE_MODULE_PATH "${ACF_ROOT_DIR}/cmake/Modules") + + # Test SDK samples using the Hunter packages (release based) + include("${ACF_ROOT_DIR}/cmake/default_options.cmake") + include("${ACF_ROOT_DIR}/cmake/HunterGate.cmake") + + HunterGate( + URL "https://github.com/ruslo/hunter/archive/v0.22.8.tar.gz" + SHA1 "e7fe3f0b61b1b4844d440ec0a02ac73ddc5f0bb2" + FILEPATH "${ACF_ROOT_DIR}/cmake/Hunter/config.cmake" + ) + + project(acf-apps VERSION 0.0.1) + + hunter_add_package(acf) + find_package(acf CONFIG REQUIRED) + + hunter_add_package(cxxopts) + find_package(cxxopts CONFIG REQUIRED) + + hunter_add_package(spdlog) + find_package(spdlog CONFIG REQUIRED) + + hunter_add_package(sugar) + find_package(sugar CONFIG REQUIRED) + + # Create acf_util lib + sugar_include("${ACF_ROOT_DIR}/src/lib/util") + add_library(acf_util ${ACF_UTIL_SRCS} ${ACF_UTIL_HDRS}) + target_link_libraries(acf_util PUBLIC spdlog::spdlog) + target_include_directories(acf_util + PUBLIC + "$" + ) + + if(ACF_BUILD_OGLES_GPGPU AND ACF_HAS_GPU) + hunter_add_package(aglet) + find_package(aglet CONFIG REQUIRED) + endif() + +else() + + hunter_add_package(cxxopts) + find_package(cxxopts CONFIG REQUIRED) + +endif() add_subdirectory(acf) -if (ACF_BUILD_OGLES_GPGPU AND TARGET aglet::aglet) +if (ACF_BUILD_OGLES_GPGPU AND ACF_HAS_GPU) add_subdirectory(pipeline) endif() diff --git a/src/app/acf/CMakeLists.txt b/src/app/acf/CMakeLists.txt index 8501781..488b222 100644 --- a/src/app/acf/CMakeLists.txt +++ b/src/app/acf/CMakeLists.txt @@ -17,7 +17,7 @@ if(${ACF_DO_GPU}) endif() add_executable(${test_app} ${acf_srcs}) -target_link_libraries(${test_app} PUBLIC acf acf_util cxxopts::cxxopts) +target_link_libraries(${test_app} PUBLIC acf::acf acf_util cxxopts::cxxopts) if(${ACF_DO_GPU}) target_include_directories(${test_app} PUBLIC "$") @@ -46,7 +46,7 @@ set(conv_app acf-mat2cpb) if(ACF_SERIALIZE_WITH_CVMATIO) add_executable(${conv_app} mat2cpb.cpp) - target_link_libraries(${conv_app} PUBLIC acf acf_util cxxopts::cxxopts cereal::cereal) + target_link_libraries(${conv_app} PUBLIC acf::acf acf_util cxxopts::cxxopts cereal::cereal) set_property(TARGET ${conv_app} PROPERTY FOLDER "app/console") install(TARGETS ${conv_app} DESTINATION bin) endif() diff --git a/src/app/acf/acf.cpp b/src/app/acf/acf.cpp index 1a9cd40..fe05ca5 100644 --- a/src/app/acf/acf.cpp +++ b/src/app/acf/acf.cpp @@ -204,11 +204,11 @@ int gauze_main(int argc, char** argv) ("h,help", "Print help message"); // clang-format on - options.parse(argc, argv); + auto cli = options.parse(argc, argv); - if ((argumentCount <= 1) || options.count("help")) + if ((argumentCount <= 1) || cli.count("help")) { - std::cout << options.help({ "" }) << std::endl; + logger->info("{}", options.help({""})); return 0; } diff --git a/src/app/acf/mat2cpb.cpp b/src/app/acf/mat2cpb.cpp index 949cdac..c4cb9aa 100644 --- a/src/app/acf/mat2cpb.cpp +++ b/src/app/acf/mat2cpb.cpp @@ -13,9 +13,11 @@ # include "io/stdlib_string.h" #endif #include -#include #include +#include +#include + #include #include @@ -43,9 +45,9 @@ int gauze_main(int argc, char** argv) ("h,help", "Print help message"); // clang-format on - options.parse(argc, argv); + auto cli = options.parse(argc, argv); - if ((argumentCount <= 1) || options.count("help")) + if ((argumentCount <= 1) || cli.count("help")) { logger->info("{}", options.help({ "" })); return 0; @@ -76,7 +78,15 @@ int gauze_main(int argc, char** argv) acf::Detector acf(sInput); - save_cpb(sOutput, acf); + // Serialize: + std::ofstream ofs(sOutput, std::ios::binary); + if(!ofs) + { + logger->error("Failed to open {}", sOutput); + return 1; + } + cereal::PortableBinaryOutputArchive oa(ofs); + oa << acf; return 0; } diff --git a/src/app/pipeline/CMakeLists.txt b/src/app/pipeline/CMakeLists.txt index da9a5dd..dcb931f 100644 --- a/src/app/pipeline/CMakeLists.txt +++ b/src/app/pipeline/CMakeLists.txt @@ -19,7 +19,7 @@ set(acf_srcs ) add_executable(${test_app} ${acf_srcs}) -target_link_libraries(${test_app} PUBLIC acf acf_util cxxopts::cxxopts ${OpenCV_LIBS}) +target_link_libraries(${test_app} PUBLIC acf::acf acf_util cxxopts::cxxopts ${OpenCV_LIBS}) # cross platform testing hunter_add_package(gauze) diff --git a/src/app/pipeline/pipeline.cpp b/src/app/pipeline/pipeline.cpp index 84b93ce..4b5085c 100644 --- a/src/app/pipeline/pipeline.cpp +++ b/src/app/pipeline/pipeline.cpp @@ -383,10 +383,10 @@ int gauze_main(int argc, char** argv) ; // clang-format on - options.parse(argc, argv); - if ((argumentCount <= 1) || options.count("help")) + auto cli = options.parse(argc, argv); + if ((argumentCount <= 1) || cli.count("help")) { - std::cout << options.help({ "" }) << std::endl; + logger->info("{}", options.help({""})); return 0; } diff --git a/src/app/pyramid/CMakeLists.txt b/src/app/pyramid/CMakeLists.txt index 77db1ab..838a403 100644 --- a/src/app/pyramid/CMakeLists.txt +++ b/src/app/pyramid/CMakeLists.txt @@ -5,6 +5,6 @@ set(test_app acf-pyramid) ############### add_executable(${test_app} pyramid.cpp) -target_link_libraries(${test_app} PUBLIC acf acf_util cxxopts::cxxopts cereal::cereal) +target_link_libraries(${test_app} PUBLIC acf::acf acf_util cxxopts::cxxopts cereal::cereal) set_property(TARGET ${test_app} PROPERTY FOLDER "app/console") install(TARGETS ${test_app} DESTINATION bin) diff --git a/src/app/pyramid/pyramid.cpp b/src/app/pyramid/pyramid.cpp index 0b1a4e8..ac2f45f 100644 --- a/src/app/pyramid/pyramid.cpp +++ b/src/app/pyramid/pyramid.cpp @@ -91,9 +91,9 @@ int gauze_main(int argc, char** argv) ("h,help", "Print help message"); // clang-format on - options.parse(argc, argv); + auto cli = options.parse(argc, argv); - if ((argumentCount <= 1) || options.count("help")) + if ((argumentCount <= 1) || cli.count("help")) { logger->info("{}", options.help({ "" })); return 0; diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 1a9b7c2..eb23f16 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -10,17 +10,15 @@ find_package(sugar CONFIG REQUIRED) sugar_include(.) - -### acf_util ### +### acf_util ### : for console apps add_library(acf_util ${ACF_UTIL_SRCS} ${ACF_UTIL_HDRS}) -target_link_libraries(acf_util PUBLIC spdlog::spdlog ${OpenCV_LIBS}) -set(acf_modules acf_util) +target_link_libraries(acf_util PUBLIC spdlog::spdlog) -### acf_shaders ### +### acf_shaders ### : for acf lib and tests if(ACF_BUILD_OGLES_GPGPU) add_library(acf_shaders ${ACF_GPU_SRCS} ${ACF_GPU_HDRS}) - target_link_libraries(acf_shaders PUBLIC spdlog::spdlog ${OpenCV_LIBS}) - list(APPEND acf_modules acf_shaders) + target_link_libraries(acf_shaders PUBLIC ogles_gpgpu::ogles_gpgpu) + set(acf_modules acf_shaders) endif() ### acf ### @@ -30,18 +28,21 @@ else() set(acf_lib_type STATIC) endif() -add_library(acf ${acf_lib_type} +set(acf_srcs ${ACF_SRCS} ${ACF_HDRS} ${ACF_HDRS_PUBLIC} ) +add_library(acf ${acf_lib_type} ${acf_srcs}) + add_library(${PROJECT_NAME}::acf ALIAS acf) target_link_libraries(acf PUBLIC ${ACF_3RDPARTY_PKG_LIBS} PRIVATE ${ACF_3RDPARTY_PKG_LIBS_} ${acf_modules} ) + target_compile_definitions(acf PUBLIC ACF_DO_HALF=1) # half precision serialization if(ACF_SERIALIZE_WITH_CVMATIO) target_compile_definitions(acf PUBLIC ACF_SERIALIZE_WITH_CVMATIO=1) @@ -49,13 +50,16 @@ endif() target_include_directories(acf PUBLIC - "$" - "$" + "$" # generated acf_export.h ) -foreach(lib acf ${acf_modules}) +foreach(lib acf ${acf_modules} acf_util) message("LIB = ${lib} >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") - target_include_directories(${lib} PUBLIC "$") + target_include_directories(${lib} + PUBLIC + "$" # for util + "$" # for io, acf + ) if(MSVC) target_compile_definitions(${lib} PUBLIC _USE_MATH_DEFINES) # define M_PI_2 for Visual Studio target_compile_definitions(${lib} PUBLIC NOMINMAX=1) # avoid std::{min,max}() conflicts @@ -168,6 +172,6 @@ install( # unit tests: if(ACF_BUILD_TESTS) - add_subdirectory(acf/ut) + add_subdirectory(acf/acf/ut) endif() diff --git a/src/lib/acf/ACF.cpp b/src/lib/acf/acf/ACF.cpp similarity index 99% rename from src/lib/acf/ACF.cpp rename to src/lib/acf/acf/ACF.cpp index 1b2be3d..1e5b045 100644 --- a/src/lib/acf/ACF.cpp +++ b/src/lib/acf/acf/ACF.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include diff --git a/src/lib/acf/ACF.h b/src/lib/acf/acf/ACF.h similarity index 99% rename from src/lib/acf/ACF.h rename to src/lib/acf/acf/ACF.h index 97a5fa1..92df88b 100644 --- a/src/lib/acf/ACF.h +++ b/src/lib/acf/acf/ACF.h @@ -19,7 +19,6 @@ #include // interface #include #include -#include #include #include diff --git a/src/lib/acf/ACFField.h b/src/lib/acf/acf/ACFField.h similarity index 100% rename from src/lib/acf/ACFField.h rename to src/lib/acf/acf/ACFField.h diff --git a/src/lib/acf/ACFIO.cpp b/src/lib/acf/acf/ACFIO.cpp similarity index 100% rename from src/lib/acf/ACFIO.cpp rename to src/lib/acf/acf/ACFIO.cpp diff --git a/src/lib/acf/ACFIO.h b/src/lib/acf/acf/ACFIO.h similarity index 100% rename from src/lib/acf/ACFIO.h rename to src/lib/acf/acf/ACFIO.h diff --git a/src/lib/acf/ACFIOArchive.h b/src/lib/acf/acf/ACFIOArchive.h similarity index 100% rename from src/lib/acf/ACFIOArchive.h rename to src/lib/acf/acf/ACFIOArchive.h diff --git a/src/lib/acf/ACFIOArchiveCereal.cpp b/src/lib/acf/acf/ACFIOArchiveCereal.cpp similarity index 100% rename from src/lib/acf/ACFIOArchiveCereal.cpp rename to src/lib/acf/acf/ACFIOArchiveCereal.cpp diff --git a/src/lib/acf/ACFObject.h b/src/lib/acf/acf/ACFObject.h similarity index 100% rename from src/lib/acf/ACFObject.h rename to src/lib/acf/acf/ACFObject.h diff --git a/src/lib/acf/GPUACF.cpp b/src/lib/acf/acf/GPUACF.cpp similarity index 100% rename from src/lib/acf/GPUACF.cpp rename to src/lib/acf/acf/GPUACF.cpp diff --git a/src/lib/acf/GPUACF.h b/src/lib/acf/acf/GPUACF.h similarity index 100% rename from src/lib/acf/GPUACF.h rename to src/lib/acf/acf/GPUACF.h diff --git a/src/lib/acf/MatP.cpp b/src/lib/acf/acf/MatP.cpp similarity index 100% rename from src/lib/acf/MatP.cpp rename to src/lib/acf/acf/MatP.cpp diff --git a/src/lib/acf/MatP.h b/src/lib/acf/acf/MatP.h similarity index 100% rename from src/lib/acf/MatP.h rename to src/lib/acf/acf/MatP.h diff --git a/src/lib/acf/ObjectDetector.cpp b/src/lib/acf/acf/ObjectDetector.cpp similarity index 100% rename from src/lib/acf/ObjectDetector.cpp rename to src/lib/acf/acf/ObjectDetector.cpp diff --git a/src/lib/acf/ObjectDetector.h b/src/lib/acf/acf/ObjectDetector.h similarity index 100% rename from src/lib/acf/ObjectDetector.h rename to src/lib/acf/acf/ObjectDetector.h diff --git a/src/lib/acf/acfModify.cpp b/src/lib/acf/acf/acfModify.cpp similarity index 100% rename from src/lib/acf/acfModify.cpp rename to src/lib/acf/acf/acfModify.cpp diff --git a/src/lib/acf/acf_common.h b/src/lib/acf/acf/acf_common.h similarity index 100% rename from src/lib/acf/acf_common.h rename to src/lib/acf/acf/acf_common.h diff --git a/src/lib/acf/bbNms.cpp b/src/lib/acf/acf/bbNms.cpp similarity index 100% rename from src/lib/acf/bbNms.cpp rename to src/lib/acf/acf/bbNms.cpp diff --git a/src/lib/acf/chnsCompute.cpp b/src/lib/acf/acf/chnsCompute.cpp similarity index 100% rename from src/lib/acf/chnsCompute.cpp rename to src/lib/acf/acf/chnsCompute.cpp diff --git a/src/lib/acf/chnsPyramid.cpp b/src/lib/acf/acf/chnsPyramid.cpp similarity index 100% rename from src/lib/acf/chnsPyramid.cpp rename to src/lib/acf/acf/chnsPyramid.cpp diff --git a/src/lib/acf/convTri.cpp b/src/lib/acf/acf/convTri.cpp similarity index 100% rename from src/lib/acf/convTri.cpp rename to src/lib/acf/acf/convTri.cpp diff --git a/src/lib/acf/convert.cpp b/src/lib/acf/acf/convert.cpp similarity index 100% rename from src/lib/acf/convert.cpp rename to src/lib/acf/acf/convert.cpp diff --git a/src/lib/acf/convert.h b/src/lib/acf/acf/convert.h similarity index 100% rename from src/lib/acf/convert.h rename to src/lib/acf/acf/convert.h diff --git a/src/lib/acf/draw.cpp b/src/lib/acf/acf/draw.cpp similarity index 93% rename from src/lib/acf/draw.cpp rename to src/lib/acf/acf/draw.cpp index 2e97039..aaa2947 100644 --- a/src/lib/acf/draw.cpp +++ b/src/lib/acf/acf/draw.cpp @@ -31,9 +31,6 @@ cv::Mat draw(acf::Detector::Pyramid& pyramid) } cv::vconcat(images, Ccpu); - // Instead of upright: - //cv::vconcat(pyramid.data[i][0].get(), Ccpu); - if (levels.size()) { cv::copyMakeBorder(Ccpu, Ccpu, 0, levels.front().rows - Ccpu.rows, 0, 0, cv::BORDER_CONSTANT); diff --git a/src/lib/acf/draw.h b/src/lib/acf/acf/draw.h similarity index 100% rename from src/lib/acf/draw.h rename to src/lib/acf/acf/draw.h diff --git a/src/lib/acf/gpu/binomial.cpp b/src/lib/acf/acf/gpu/binomial.cpp similarity index 100% rename from src/lib/acf/gpu/binomial.cpp rename to src/lib/acf/acf/gpu/binomial.cpp diff --git a/src/lib/acf/gpu/binomial.h b/src/lib/acf/acf/gpu/binomial.h similarity index 100% rename from src/lib/acf/gpu/binomial.h rename to src/lib/acf/acf/gpu/binomial.h diff --git a/src/lib/acf/gpu/gradhist.cpp b/src/lib/acf/acf/gpu/gradhist.cpp similarity index 100% rename from src/lib/acf/gpu/gradhist.cpp rename to src/lib/acf/acf/gpu/gradhist.cpp diff --git a/src/lib/acf/gpu/gradhist.h b/src/lib/acf/acf/gpu/gradhist.h similarity index 100% rename from src/lib/acf/gpu/gradhist.h rename to src/lib/acf/acf/gpu/gradhist.h diff --git a/src/lib/acf/gpu/multipass/triangle_opt_pass.cpp b/src/lib/acf/acf/gpu/multipass/triangle_opt_pass.cpp similarity index 100% rename from src/lib/acf/gpu/multipass/triangle_opt_pass.cpp rename to src/lib/acf/acf/gpu/multipass/triangle_opt_pass.cpp diff --git a/src/lib/acf/gpu/multipass/triangle_opt_pass.h b/src/lib/acf/acf/gpu/multipass/triangle_opt_pass.h similarity index 100% rename from src/lib/acf/gpu/multipass/triangle_opt_pass.h rename to src/lib/acf/acf/gpu/multipass/triangle_opt_pass.h diff --git a/src/lib/acf/gpu/multipass/triangle_pass.cpp b/src/lib/acf/acf/gpu/multipass/triangle_pass.cpp similarity index 100% rename from src/lib/acf/gpu/multipass/triangle_pass.cpp rename to src/lib/acf/acf/gpu/multipass/triangle_pass.cpp diff --git a/src/lib/acf/gpu/multipass/triangle_pass.h b/src/lib/acf/acf/gpu/multipass/triangle_pass.h similarity index 100% rename from src/lib/acf/gpu/multipass/triangle_pass.h rename to src/lib/acf/acf/gpu/multipass/triangle_pass.h diff --git a/src/lib/acf/gpu/swizzle2.cpp b/src/lib/acf/acf/gpu/swizzle2.cpp similarity index 100% rename from src/lib/acf/gpu/swizzle2.cpp rename to src/lib/acf/acf/gpu/swizzle2.cpp diff --git a/src/lib/acf/gpu/swizzle2.h b/src/lib/acf/acf/gpu/swizzle2.h similarity index 100% rename from src/lib/acf/gpu/swizzle2.h rename to src/lib/acf/acf/gpu/swizzle2.h diff --git a/src/lib/acf/gpu/triangle.cpp b/src/lib/acf/acf/gpu/triangle.cpp similarity index 100% rename from src/lib/acf/gpu/triangle.cpp rename to src/lib/acf/acf/gpu/triangle.cpp diff --git a/src/lib/acf/gpu/triangle.h b/src/lib/acf/acf/gpu/triangle.h similarity index 100% rename from src/lib/acf/gpu/triangle.h rename to src/lib/acf/acf/gpu/triangle.h diff --git a/src/lib/acf/gpu/triangle_opt.cpp b/src/lib/acf/acf/gpu/triangle_opt.cpp similarity index 100% rename from src/lib/acf/gpu/triangle_opt.cpp rename to src/lib/acf/acf/gpu/triangle_opt.cpp diff --git a/src/lib/acf/gpu/triangle_opt.h b/src/lib/acf/acf/gpu/triangle_opt.h similarity index 100% rename from src/lib/acf/gpu/triangle_opt.h rename to src/lib/acf/acf/gpu/triangle_opt.h diff --git a/src/lib/acf/gradientHist.cpp b/src/lib/acf/acf/gradientHist.cpp similarity index 100% rename from src/lib/acf/gradientHist.cpp rename to src/lib/acf/acf/gradientHist.cpp diff --git a/src/lib/acf/gradientMag.cpp b/src/lib/acf/acf/gradientMag.cpp similarity index 100% rename from src/lib/acf/gradientMag.cpp rename to src/lib/acf/acf/gradientMag.cpp diff --git a/src/lib/acf/random.h b/src/lib/acf/acf/random.h similarity index 100% rename from src/lib/acf/random.h rename to src/lib/acf/acf/random.h diff --git a/src/lib/acf/rgbConvert.cpp b/src/lib/acf/acf/rgbConvert.cpp similarity index 100% rename from src/lib/acf/rgbConvert.cpp rename to src/lib/acf/acf/rgbConvert.cpp diff --git a/src/lib/acf/acf/sugar.cmake b/src/lib/acf/acf/sugar.cmake new file mode 100644 index 0000000..1bdebb8 --- /dev/null +++ b/src/lib/acf/acf/sugar.cmake @@ -0,0 +1,88 @@ +# This file generated automatically by: +# generate_sugar_files.py +# see wiki for more info: +# https://github.com/ruslo/sugar/wiki/Collecting-sources + +if(DEFINED LIB_ACF_ACF_SUGAR_CMAKE_) + return() +else() + set(LIB_ACF_ACF_SUGAR_CMAKE_ 1) +endif() + +include(sugar_files) + +sugar_files(ACF_SRCS + ACF.cpp + ACFIO.cpp # optional + ACFIOArchiveCereal.cpp + MatP.cpp + ObjectDetector.cpp + acfModify.cpp + bbNms.cpp + chnsCompute.cpp + chnsPyramid.cpp + convTri.cpp + draw.cpp + gradientHist.cpp + gradientMag.cpp + rgbConvert.cpp + ####################### + ### Toolbox sources ### + ####################### + toolbox/acfDetect1.cpp + toolbox/convConst.cpp + toolbox/gradientMex.cpp + toolbox/imPadMex.cpp + toolbox/imResampleMex.cpp + toolbox/rgbConvertMex.cpp + toolbox/wrappers.cpp +) + +sugar_files(ACF_HDRS + ACFIO.h + ACFIOArchive.h + ACFObject.h + ObjectDetector.h + random.h + ####################### + ### Toolbox headers ### + ####################### + toolbox/sse.hpp + toolbox/wrappers.hpp + ) + +sugar_files(ACF_HDRS_PUBLIC + ACF.h + ACFField.h + ObjectDetector.h + MatP.h + acf_common.h + draw.h +) + +if(ACF_BUILD_OGLES_GPGPU) + # Public GPUACF classes added to the main library + sugar_files(ACF_HDRS_PUBLIC GPUACF.h) + sugar_files(ACF_HDRS convert.h) + sugar_files(ACF_SRCS GPUACF.cpp convert.cpp) + + # All other shaders to in the acf_shaders utility lib for reuse + sugar_files(ACF_GPU_HDRS + gpu/gradhist.h + gpu/multipass/triangle_pass.h + gpu/multipass/triangle_opt_pass.h + gpu/swizzle2.h + gpu/triangle.h + gpu/triangle_opt.h + gpu/binomial.h + ) + sugar_files(ACF_GPU_SRCS + gpu/gradhist.cpp + gpu/multipass/triangle_pass.cpp + gpu/multipass/triangle_opt_pass.cpp + gpu/swizzle2.cpp + gpu/triangle.cpp + gpu/triangle_opt.cpp + gpu/binomial.cpp + ) +endif() diff --git a/src/lib/acf/toolbox/acfDetect1.cpp b/src/lib/acf/acf/toolbox/acfDetect1.cpp similarity index 100% rename from src/lib/acf/toolbox/acfDetect1.cpp rename to src/lib/acf/acf/toolbox/acfDetect1.cpp diff --git a/src/lib/acf/toolbox/chnsTestCpp.cpp b/src/lib/acf/acf/toolbox/chnsTestCpp.cpp similarity index 100% rename from src/lib/acf/toolbox/chnsTestCpp.cpp rename to src/lib/acf/acf/toolbox/chnsTestCpp.cpp diff --git a/src/lib/acf/toolbox/convConst.cpp b/src/lib/acf/acf/toolbox/convConst.cpp similarity index 100% rename from src/lib/acf/toolbox/convConst.cpp rename to src/lib/acf/acf/toolbox/convConst.cpp diff --git a/src/lib/acf/toolbox/gradientMex.cpp b/src/lib/acf/acf/toolbox/gradientMex.cpp similarity index 100% rename from src/lib/acf/toolbox/gradientMex.cpp rename to src/lib/acf/acf/toolbox/gradientMex.cpp diff --git a/src/lib/acf/toolbox/imPadMex.cpp b/src/lib/acf/acf/toolbox/imPadMex.cpp similarity index 100% rename from src/lib/acf/toolbox/imPadMex.cpp rename to src/lib/acf/acf/toolbox/imPadMex.cpp diff --git a/src/lib/acf/toolbox/imResampleMex.cpp b/src/lib/acf/acf/toolbox/imResampleMex.cpp similarity index 100% rename from src/lib/acf/toolbox/imResampleMex.cpp rename to src/lib/acf/acf/toolbox/imResampleMex.cpp diff --git a/src/lib/acf/toolbox/rgbConvertMex.cpp b/src/lib/acf/acf/toolbox/rgbConvertMex.cpp similarity index 100% rename from src/lib/acf/toolbox/rgbConvertMex.cpp rename to src/lib/acf/acf/toolbox/rgbConvertMex.cpp diff --git a/src/lib/acf/toolbox/sse.hpp b/src/lib/acf/acf/toolbox/sse.hpp similarity index 100% rename from src/lib/acf/toolbox/sse.hpp rename to src/lib/acf/acf/toolbox/sse.hpp diff --git a/src/lib/acf/toolbox/wrappers.cpp b/src/lib/acf/acf/toolbox/wrappers.cpp similarity index 100% rename from src/lib/acf/toolbox/wrappers.cpp rename to src/lib/acf/acf/toolbox/wrappers.cpp diff --git a/src/lib/acf/toolbox/wrappers.hpp b/src/lib/acf/acf/toolbox/wrappers.hpp similarity index 100% rename from src/lib/acf/toolbox/wrappers.hpp rename to src/lib/acf/acf/toolbox/wrappers.hpp diff --git a/src/lib/acf/ut/CMakeLists.txt b/src/lib/acf/acf/ut/CMakeLists.txt similarity index 100% rename from src/lib/acf/ut/CMakeLists.txt rename to src/lib/acf/acf/ut/CMakeLists.txt diff --git a/src/lib/acf/ut/test-acf.cpp b/src/lib/acf/acf/ut/test-acf.cpp similarity index 100% rename from src/lib/acf/ut/test-acf.cpp rename to src/lib/acf/acf/ut/test-acf.cpp diff --git a/src/lib/acf/sugar.cmake b/src/lib/acf/sugar.cmake index 3987266..ffd7a65 100644 --- a/src/lib/acf/sugar.cmake +++ b/src/lib/acf/sugar.cmake @@ -1,88 +1 @@ -# This file generated automatically by: -# generate_sugar_files.py -# see wiki for more info: -# https://github.com/ruslo/sugar/wiki/Collecting-sources - -if(DEFINED LIB_ACF_SUGAR_CMAKE_) - return() -else() - set(LIB_ACF_SUGAR_CMAKE_ 1) -endif() - -include(sugar_files) - -sugar_files(ACF_SRCS - ACF.cpp - ACFIO.cpp # optional - ACFIOArchiveCereal.cpp - MatP.cpp - ObjectDetector.cpp - acfModify.cpp - bbNms.cpp - chnsCompute.cpp - chnsPyramid.cpp - convTri.cpp - draw.cpp - gradientHist.cpp - gradientMag.cpp - rgbConvert.cpp - ####################### - ### Toolbox sources ### - ####################### - toolbox/acfDetect1.cpp - toolbox/convConst.cpp - toolbox/gradientMex.cpp - toolbox/imPadMex.cpp - toolbox/imResampleMex.cpp - toolbox/rgbConvertMex.cpp - toolbox/wrappers.cpp -) - -sugar_files(ACF_HDRS - ACFIO.h - ACFIOArchive.h - ACFObject.h - ObjectDetector.h - draw.h - random.h - ####################### - ### Toolbox headers ### - ####################### - toolbox/sse.hpp - toolbox/wrappers.hpp - ) - -sugar_files(ACF_HDRS_PUBLIC - ACF.h - ACFField.h - ObjectDetector.h - MatP.h - acf_common.h -) - -if(ACF_BUILD_OGLES_GPGPU) - # Public GPUACF classes added to the main library - sugar_files(ACF_HDRS_PUBLIC GPUACF.h) - sugar_files(ACF_HDRS convert.h) - sugar_files(ACF_SRCS GPUACF.cpp convert.cpp) - - # All other shaders to in the acf_shaders utility lib for reuse - sugar_files(ACF_GPU_HDRS - gpu/gradhist.h - gpu/multipass/triangle_pass.h - gpu/multipass/triangle_opt_pass.h - gpu/swizzle2.h - gpu/triangle.h - gpu/triangle_opt.h - gpu/binomial.h - ) - sugar_files(ACF_GPU_SRCS - gpu/gradhist.cpp - gpu/multipass/triangle_pass.cpp - gpu/multipass/triangle_opt_pass.cpp - gpu/swizzle2.cpp - gpu/triangle.cpp - gpu/triangle_opt.cpp - gpu/binomial.cpp - ) -endif() +sugar_include(acf) diff --git a/src/lib/sugar.cmake b/src/lib/sugar.cmake index 1f00df4..fc7f192 100644 --- a/src/lib/sugar.cmake +++ b/src/lib/sugar.cmake @@ -1,3 +1,38 @@ sugar_include(acf) + +# NOTE: The util directory contains utility classes/functions used by the acf +# library. In this context they are effectively non-exported == private +# headers. They are also used as a support lib in the various console apps +# and unit tests within the repository. +# +# The util directory sits parallel with the root acf folder so that the +# target_include_directories() calls can include util headers without +# automatically including acf headers from the repository tree, as we want +# to make sure the acf folder includes can be provided exclusively from the +# the installed/managed acf package, using: +# +# hunter_config(acf GIT_SELF ...) +# +# Layout: +# +# lib +# +-util : utility function +# +-io : io/serialization functions +# +-acf +# +-acf : acf implementation + +# +# Example src/app/acf/acf.cpp: +# +# #include // from ${HOME}/.hunter//Install/acf +# #include // provided from acf/src/lib/util (in-repo) +# +# int main(int argc, char **argv) +# { +# // snip +# } +# + sugar_include(util) sugar_include(io) + diff --git a/src/lib/util/string_utils.cpp b/src/lib/util/string_utils.cpp deleted file mode 100644 index eb15593..0000000 --- a/src/lib/util/string_utils.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/*! -*-c++-*- - @file string_utils.cpp - @author David Hirvonen - @brief Implementation of string manipulation routines. - - \copyright Copyright 2014-2016 Elucideye, Inc. All rights reserved. - \license{This project is released under the 3 Clause BSD License.} - -*/ - -#include -#include -#include - -#include - -UTIL_NAMESPACE_BEGIN - -void tokenize(const std::string& input, std::vector& tokens) -{ - std::stringstream iss(input); - iss.imbue(std::locale(std::locale(), new csv_reader())); - std::copy(std::istream_iterator(iss), std::istream_iterator(), std::back_inserter(tokens)); -} - -std::string basename(const std::string& name, const std::string& ext) -{ - size_t pos = name.rfind('/'); - - if (pos != std::string::npos) - { - pos += 1; - } - else - { - pos = 0; - } - - std::string base = name.substr(pos); - return base.substr(0, std::min(base.size(), base.rfind(ext))); -}; - -bool replace(std::string& str, const std::string& from, const std::string& to) -{ - bool status = false; - size_t pos = str.find(from); - if (pos != std::string::npos) - { - status = true; - str.replace(pos, from.length(), to); - } - return status; -} - -UTIL_NAMESPACE_END diff --git a/src/lib/util/string_utils.h b/src/lib/util/string_utils.h index be1b259..6385651 100644 --- a/src/lib/util/string_utils.h +++ b/src/lib/util/string_utils.h @@ -13,21 +13,26 @@ #include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include UTIL_NAMESPACE_BEGIN -void tokenize(const std::string& input, std::vector& tokens); -std::string basename(const std::string& name, const std::string& ext = "."); -bool replace(std::string& str, const std::string& from, const std::string& to); +inline std::string basename(const std::string& name, const std::string& ext=".") +{ + size_t pos = name.rfind('/'); + + if (pos != std::string::npos) + { + pos += 1; + } + else + { + pos = 0; + } + + std::string base = name.substr(pos); + return base.substr(0, std::min(base.size(), base.rfind(ext))); +}; UTIL_NAMESPACE_END diff --git a/src/lib/util/sugar.cmake b/src/lib/util/sugar.cmake index 5d1c39a..a6500bd 100644 --- a/src/lib/util/sugar.cmake +++ b/src/lib/util/sugar.cmake @@ -11,6 +11,7 @@ sugar_files(ACF_UTIL_HDRS LazyParallelResource.h Line.h Logger.h + ScopeTimeLogger.h acf_math.h acf_util.h cli.h @@ -18,10 +19,8 @@ sugar_files(ACF_UTIL_HDRS ordered.h string_hash.h string_utils.h - timing.h ) sugar_files(ACF_UTIL_SRCS Logger.cpp - string_utils.cpp ) diff --git a/src/lib/util/timing.h b/src/lib/util/timing.h deleted file mode 100644 index 55c5d34..0000000 --- a/src/lib/util/timing.h +++ /dev/null @@ -1,63 +0,0 @@ -/*! -*-c++-*- - @file timing.h - @author Shervin Emami - @brief Common timer macros - - \copyright Copyright 2014-2016 Elucideye, Inc. All rights reserved. - \license{This project is released under the 3 Clause BSD License.} - -*/ - -#ifndef __acf_timing_h__ -#define __acf_timing_h__ - -#include - -#include -#include - -UTIL_NAMESPACE_BEGIN - -class ScopeTimeLogger -{ - using HighResolutionClock = std::chrono::high_resolution_clock; - using TimePoint = HighResolutionClock::time_point; - -public: - template - ScopeTimeLogger(Callable&& logger) - : m_logger(std::forward(logger)) - { - m_tic = HighResolutionClock::now(); - } - - ScopeTimeLogger(ScopeTimeLogger&& other) - : m_logger(std::move(other.m_logger)) - , m_tic(other.m_tic) - { - } - - ~ScopeTimeLogger() - { - auto now = HighResolutionClock::now(); - m_logger(timeDifference(now, m_tic)); - } - - ScopeTimeLogger(const ScopeTimeLogger&) = delete; - void operator=(const ScopeTimeLogger&) = delete; - - static double timeDifference(const TimePoint& a, const TimePoint& b) - { - return std::chrono::duration_cast>(a - b).count(); - } - - const TimePoint& getTime() const { return m_tic; } - -protected: - std::function m_logger; - TimePoint m_tic; -}; - -UTIL_NAMESPACE_END - -#endif // __acf_timing_h__