Commit faf9cf48 authored by Nadir Dalla Pozza's avatar Nadir Dalla Pozza
Browse files

Documentation

parent 1a55d83d
......@@ -11,27 +11,101 @@ set(CMAKE_MAKEFILE_DEPENDS
"CMakeFiles/3.25.1/CMakeCCompiler.cmake"
"CMakeFiles/3.25.1/CMakeCXXCompiler.cmake"
"CMakeFiles/3.25.1/CMakeSystem.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeCCompiler.cmake.in"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeCCompilerABI.c"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeCInformation.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeCXXCompiler.cmake.in"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeCXXCompilerABI.cpp"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeCXXInformation.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeCommonLanguageInclude.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeCompilerIdDetection.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeDetermineCCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeDetermineCompileFeatures.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeDetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeDetermineCompilerABI.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeDetermineCompilerId.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeDetermineSystem.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeFindBinUtils.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeGenericSystem.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeInitializeConfigs.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeLanguageInformation.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeParseImplicitIncludeInfo.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeParseImplicitLinkInfo.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeParseLibraryArchitecture.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeSystem.cmake.in"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeSystemSpecificInformation.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeTestCCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeTestCXXCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeTestCompilerCommon.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/CMakeUnixFindMake.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/ADSP-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/ARMCC-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/ARMClang-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/AppleClang-C.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/AppleClang-CXX.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/AppleClang-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Borland-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Bruce-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Clang-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Clang-DetermineCompilerInternal.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Clang.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Compaq-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Cray-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Embarcadero-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Fujitsu-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/GHS-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/GNU-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/GNU.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/HP-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/HP-CXX-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/IAR-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Intel-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/LCC-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/MSVC-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/NVHPC-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/NVIDIA-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/PGI-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/PathScale-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/SCO-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/SDCC-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/SunPro-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/TI-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Tasking-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/Watcom-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/XL-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/XL-CXX-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/XLClang-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/zOS-C-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/FindBoost.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/FindPackageHandleStandardArgs.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/FindPackageMessage.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Internal/FeatureTesting.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Platform/Apple-AppleClang-C.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Platform/Apple-AppleClang-CXX.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Platform/Apple-Clang-C.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Platform/Apple-Clang-CXX.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Platform/Apple-Clang.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Platform/Darwin-Determine-CXX.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Platform/Darwin-Initialize.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Platform/Darwin.cmake"
"/usr/local/Cellar/cmake/3.25.1/share/cmake/Modules/Platform/UnixPaths.cmake"
......@@ -61,6 +135,11 @@ set(CMAKE_MAKEFILE_OUTPUTS
# Byproducts of CMake generate step:
set(CMAKE_MAKEFILE_PRODUCTS
"CMakeFiles/3.25.1/CMakeSystem.cmake"
"CMakeFiles/3.25.1/CMakeCCompiler.cmake"
"CMakeFiles/3.25.1/CMakeCXXCompiler.cmake"
"CMakeFiles/3.25.1/CMakeCCompiler.cmake"
"CMakeFiles/3.25.1/CMakeCXXCompiler.cmake"
"CMakeFiles/CMakeDirectoryInformation.cmake"
)
......
......@@ -73,15 +73,15 @@ CMakeFiles/video_analyser.dir/src/script.cpp.o: CMakeFiles/video_analyser.dir/fl
CMakeFiles/video_analyser.dir/src/script.cpp.o: /Users/nadir/Documents/MPAI-CAE/AIMs/VideoAnalyser/src/script.cpp
CMakeFiles/video_analyser.dir/src/script.cpp.o: CMakeFiles/video_analyser.dir/compiler_depend.ts
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/Users/nadir/Documents/MPAI-CAE/AIMs/VideoAnalyser/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/video_analyser.dir/src/script.cpp.o"
/usr/bin/clang++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/video_analyser.dir/src/script.cpp.o -MF CMakeFiles/video_analyser.dir/src/script.cpp.o.d -o CMakeFiles/video_analyser.dir/src/script.cpp.o -c /Users/nadir/Documents/MPAI-CAE/AIMs/VideoAnalyser/src/script.cpp
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/video_analyser.dir/src/script.cpp.o -MF CMakeFiles/video_analyser.dir/src/script.cpp.o.d -o CMakeFiles/video_analyser.dir/src/script.cpp.o -c /Users/nadir/Documents/MPAI-CAE/AIMs/VideoAnalyser/src/script.cpp
CMakeFiles/video_analyser.dir/src/script.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/video_analyser.dir/src/script.cpp.i"
/usr/bin/clang++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/nadir/Documents/MPAI-CAE/AIMs/VideoAnalyser/src/script.cpp > CMakeFiles/video_analyser.dir/src/script.cpp.i
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /Users/nadir/Documents/MPAI-CAE/AIMs/VideoAnalyser/src/script.cpp > CMakeFiles/video_analyser.dir/src/script.cpp.i
CMakeFiles/video_analyser.dir/src/script.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/video_analyser.dir/src/script.cpp.s"
/usr/bin/clang++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/nadir/Documents/MPAI-CAE/AIMs/VideoAnalyser/src/script.cpp -o CMakeFiles/video_analyser.dir/src/script.cpp.s
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /Users/nadir/Documents/MPAI-CAE/AIMs/VideoAnalyser/src/script.cpp -o CMakeFiles/video_analyser.dir/src/script.cpp.s
# Object files for target video_analyser
video_analyser_OBJECTS = \
......
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.25
# compile CXX with /usr/bin/clang++
# compile CXX with /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
CXX_DEFINES = -DBOOST_PROGRAM_OPTIONS_DYN_LINK -DBOOST_PROGRAM_OPTIONS_NO_LIB
CXX_INCLUDES = -isystem /usr/local/Cellar/opencv/4.7.0_1/include/opencv4 -isystem /usr/local/include
CXX_FLAGS = -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk -mmacosx-version-min=12.6 -std=gnu++2b
CXX_FLAGS = -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk -mmacosx-version-min=12.6 -std=gnu++2b
/usr/bin/clang++ -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk -mmacosx-version-min=12.6 -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/video_analyser.dir/src/script.cpp.o -o /Users/nadir/Documents/MPAI-CAE/AIMs/VideoAnalyser/bin/video_analyser -L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,-rpath,/usr/local/opt/opencv/lib /usr/local/opt/opencv/lib/libopencv_gapi.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_stitching.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_alphamat.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_aruco.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_barcode.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_bgsegm.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_bioinspired.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_ccalib.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_dnn_objdetect.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_dnn_superres.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_dpm.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_face.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_freetype.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_fuzzy.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_hfs.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_img_hash.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_intensity_transform.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_line_descriptor.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_mcc.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_quality.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_rapid.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_reg.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_rgbd.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_saliency.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_sfm.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_stereo.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_structured_light.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_superres.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_surface_matching.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_tracking.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_videostab.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_viz.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_wechat_qrcode.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_xfeatures2d.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_xobjdetect.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_xphoto.4.7.0.dylib /usr/local/lib/libboost_program_options.dylib /usr/local/opt/opencv/lib/libopencv_shape.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_highgui.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_datasets.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_plot.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_text.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_ml.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_phase_unwrapping.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_optflow.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_ximgproc.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_video.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_videoio.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_imgcodecs.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_objdetect.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_calib3d.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_dnn.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_features2d.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_flann.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_photo.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_imgproc.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_core.4.7.0.dylib
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk -mmacosx-version-min=12.6 -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/video_analyser.dir/src/script.cpp.o -o /Users/nadir/Documents/MPAI-CAE/AIMs/VideoAnalyser/bin/video_analyser -L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,-rpath,/usr/local/opt/opencv/lib /usr/local/opt/opencv/lib/libopencv_gapi.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_stitching.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_alphamat.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_aruco.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_barcode.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_bgsegm.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_bioinspired.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_ccalib.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_dnn_objdetect.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_dnn_superres.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_dpm.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_face.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_freetype.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_fuzzy.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_hfs.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_img_hash.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_intensity_transform.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_line_descriptor.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_mcc.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_quality.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_rapid.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_reg.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_rgbd.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_saliency.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_sfm.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_stereo.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_structured_light.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_superres.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_surface_matching.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_tracking.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_videostab.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_viz.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_wechat_qrcode.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_xfeatures2d.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_xobjdetect.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_xphoto.4.7.0.dylib /usr/local/lib/libboost_program_options.dylib /usr/local/opt/opencv/lib/libopencv_shape.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_highgui.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_datasets.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_plot.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_text.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_ml.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_phase_unwrapping.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_optflow.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_ximgproc.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_video.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_videoio.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_imgcodecs.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_objdetect.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_calib3d.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_dnn.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_features2d.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_flann.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_photo.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_imgproc.4.7.0.dylib /usr/local/opt/opencv/lib/libopencv_core.4.7.0.dylib
......@@ -12,7 +12,7 @@ if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
else()
set(CMAKE_INSTALL_CONFIG_NAME "Debug")
set(CMAKE_INSTALL_CONFIG_NAME "")
endif()
message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
endif()
......@@ -34,7 +34,7 @@ endif()
# Set default install directory permissions.
if(NOT DEFINED CMAKE_OBJDUMP)
set(CMAKE_OBJDUMP "/usr/bin/objdump")
set(CMAKE_OBJDUMP "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/objdump")
endif()
if(CMAKE_INSTALL_COMPONENT)
......
{
"WorkingPath": "/Users/nadir/Documents/MPAI-CAE/Workflow",
"FilesName": "test.mov",
"Brands": true,
......@@ -10,10 +9,6 @@
"AngleThresh": 10000,
"ScaleThresh": 200,
"PosThresh": 40,
"MinDistTape": 10,
"AngleThreshTape": 1000,
"ScaleThreshTape": 1,
"PosThreshTape": 1,
"MinDistCapstan": 1,
"AngleThreshCapstan": 1000,
"ScaleThreshCapstan": 30,
......
<config>
<threshold_percentual>2</threshold_percentual>
<threshold_percentual_capstan>1.5</threshold_percentual_capstan>
<speed>7.5</speed>
<marche>1</marche>
</config>
<path>
<value>/Users/nadir/Documents/MPAI-CAE/AIMs/VideoAnalyser/video/BERIO060.mov</value>
</path>
Use of this software is granted under one of the following two licenses,
to be chosen freely by the user.
1. Boost Software License - Version 1.0 - August 17th, 2003
===============================================================================
Copyright (c) 2006, 2007 Marcin Kalicinski
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
2. The MIT License
===============================================================================
Copyright (c) 2006, 2007 Marcin Kalicinski
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
This diff is collapsed.
This diff is collapsed.
#ifndef RAPIDXML_ITERATORS_HPP_INCLUDED
#define RAPIDXML_ITERATORS_HPP_INCLUDED
// Copyright (C) 2006, 2009 Marcin Kalicinski
// Version 1.13
// Revision $DateTime: 2009/05/13 01:46:17 $
//! \file rapidxml_iterators.hpp This file contains rapidxml iterators
#include "rapidxml.hpp"
namespace rapidxml
{
//! Iterator of child nodes of xml_node
template<class Ch>
class node_iterator
{
public:
typedef typename xml_node<Ch> value_type;
typedef typename xml_node<Ch> &reference;
typedef typename xml_node<Ch> *pointer;
typedef std::ptrdiff_t difference_type;
typedef std::bidirectional_iterator_tag iterator_category;
node_iterator()
: m_node(0)
{
}
node_iterator(xml_node<Ch> *node)
: m_node(node->first_node())
{
}
reference operator *() const
{
assert(m_node);
return *m_node;
}
pointer operator->() const
{
assert(m_node);
return m_node;
}
node_iterator& operator++()
{
assert(m_node);
m_node = m_node->next_sibling();
return *this;
}
node_iterator operator++(int)
{
node_iterator tmp = *this;
++this;
return tmp;
}
node_iterator& operator--()
{
assert(m_node && m_node->previous_sibling());
m_node = m_node->previous_sibling();
return *this;
}
node_iterator operator--(int)
{
node_iterator tmp = *this;
++this;
return tmp;
}
bool operator ==(const node_iterator<Ch> &rhs)
{
return m_node == rhs.m_node;
}
bool operator !=(const node_iterator<Ch> &rhs)
{
return m_node != rhs.m_node;
}
private:
xml_node<Ch> *m_node;
};
//! Iterator of child attributes of xml_node
template<class Ch>
class attribute_iterator
{
public:
typedef typename xml_attribute<Ch> value_type;
typedef typename xml_attribute<Ch> &reference;
typedef typename xml_attribute<Ch> *pointer;
typedef std::ptrdiff_t difference_type;
typedef std::bidirectional_iterator_tag iterator_category;
attribute_iterator()
: m_attribute(0)
{
}
attribute_iterator(xml_node<Ch> *node)
: m_attribute(node->first_attribute())
{
}
reference operator *() const
{
assert(m_attribute);
return *m_attribute;
}
pointer operator->() const
{
assert(m_attribute);
return m_attribute;
}
attribute_iterator& operator++()
{
assert(m_attribute);
m_attribute = m_attribute->next_attribute();
return *this;
}
attribute_iterator operator++(int)
{
attribute_iterator tmp = *this;
++this;
return tmp;
}
attribute_iterator& operator--()
{
assert(m_attribute && m_attribute->previous_attribute());
m_attribute = m_attribute->previous_attribute();
return *this;
}
attribute_iterator operator--(int)
{
attribute_iterator tmp = *this;
++this;
return tmp;
}
bool operator ==(const attribute_iterator<Ch> &rhs)
{
return m_attribute == rhs.m_attribute;
}
bool operator !=(const attribute_iterator<Ch> &rhs)
{
return m_attribute != rhs.m_attribute;
}
private:
xml_attribute<Ch> *m_attribute;
};
}
#endif
#ifndef RAPIDXML_PRINT_HPP_INCLUDED
#define RAPIDXML_PRINT_HPP_INCLUDED
// Copyright (C) 2006, 2009 Marcin Kalicinski
// Version 1.13
// Revision $DateTime: 2009/05/13 01:46:17 $
//! \file rapidxml_print.hpp This file contains rapidxml printer implementation
#include "rapidxml.hpp"
// Only include streams if not disabled
#ifndef RAPIDXML_NO_STREAMS
#include <ostream>
#include <iterator>
#endif
namespace rapidxml
{
///////////////////////////////////////////////////////////////////////
// Printing flags
const int print_no_indenting = 0x1; //!< Printer flag instructing the printer to suppress indenting of XML. See print() function.
///////////////////////////////////////////////////////////////////////
// Internal
//! \cond internal
namespace internal
{
///////////////////////////////////////////////////////////////////////////
// Internal character operations
// Copy characters from given range to given output iterator
template<class OutIt, class Ch>
inline OutIt copy_chars(const Ch *begin, const Ch *end, OutIt out)
{
while (begin != end)
*out++ = *begin++;
return out;
}
// Copy characters from given range to given output iterator and expand
// characters into references (&lt; &gt; &apos; &quot; &amp;)
template<class OutIt, class Ch>
inline OutIt copy_and_expand_chars(const Ch *begin, const Ch *end, Ch noexpand, OutIt out)
{
while (begin != end)
{
if (*begin == noexpand)
{
*out++ = *begin; // No expansion, copy character
}
else
{
switch (*begin)
{
case Ch('<'):
*out++ = Ch('&'); *out++ = Ch('l'); *out++ = Ch('t'); *out++ = Ch(';');
break;
case Ch('>'):
*out++ = Ch('&'); *out++ = Ch('g'); *out++ = Ch('t'); *out++ = Ch(';');
break;
case Ch('\''):
*out++ = Ch('&'); *out++ = Ch('a'); *out++ = Ch('p'); *out++ = Ch('o'); *out++ = Ch('s'); *out++ = Ch(';');
break;
case Ch('"'):
*out++ = Ch('&'); *out++ = Ch('q'); *out++ = Ch('u'); *out++ = Ch('o'); *out++ = Ch('t'); *out++ = Ch(';');
break;
case Ch('&'):
*out++ = Ch('&'); *out++ = Ch('a'); *out++ = Ch('m'); *out++ = Ch('p'); *out++ = Ch(';');
break;
default:
*out++ = *begin; // No expansion, copy character
}
}
++begin; // Step to next character
}
return out;
}
// Fill given output iterator with repetitions of the same character
template<class OutIt, class Ch>
inline OutIt fill_chars(OutIt out, int n, Ch ch)
{
for (int i = 0; i < n; ++i)
*out++ = ch;
return out;
}
// Find character
template<class Ch, Ch ch>
inline bool find_char(const Ch *begin, const Ch *end)
{
while (begin != end)
if (*begin++ == ch)
return true;
return false;
}
///////////////////////////////////////////////////////////////////////////
// Internal printing operations
// Print node
template<class OutIt, class Ch>
inline OutIt print_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
{
// Print proper node type
switch (node->type())
{
// Document
case node_document:
out = print_children(out, node, flags, indent);
break;
// Element
case node_element:
out = print_element_node(out, node, flags, indent);
break;
// Data
case node_data:
out = print_data_node(out, node, flags, indent);
break;
// CDATA
case node_cdata:
out = print_cdata_node(out, node, flags, indent);
break;
// Declaration
case node_declaration:
out = print_declaration_node(out, node, flags, indent);
break;
// Comment
case node_comment:
out = print_comment_node(out, node, flags, indent);
break;
// Doctype
case node_doctype:
out = print_doctype_node(out, node, flags, indent);
break;
// Pi
case node_pi:
out = print_pi_node(out, node, flags, indent);
break;
// Unknown
default:
assert(0);
break;
}
// If indenting not disabled, add line break after node
if (!(flags & print_no_indenting))
*out = Ch('\n'), ++out;
// Return modified iterator
return out;
}
// Print children of the node
template<class OutIt, class Ch>
inline OutIt print_children(OutIt out, const xml_node<Ch> *node, int flags, int indent)
{
for (xml_node<Ch> *child = node->first_node(); child; child = child->next_sibling())
out = print_node(out, child, flags, indent);
return out;
}
// Print attributes of the node
template<class OutIt, class Ch>
inline OutIt print_attributes(OutIt out, const xml_node<Ch> *node, int flags)
{
for (xml_attribute<Ch> *attribute = node->first_attribute(); attribute; attribute = attribute->next_attribute())
{
if (attribute->name() && attribute->value())
{
// Print attribute name
*out = Ch(' '), ++out;
out = copy_chars(attribute->name(), attribute->name() + attribute->name_size(), out);
*out = Ch('='), ++out;
// Print attribute value using appropriate quote type
if (find_char<Ch, Ch('"')>(attribute->value(), attribute->value() + attribute->value_size()))
{
*out = Ch('\''), ++out;
out = copy_and_expand_chars(attribute->value(), attribute->value() + attribute->value_size(), Ch('"'), out);
*out = Ch('\''), ++out;
}
else
{
*out = Ch('"'), ++out;
out = copy_and_expand_chars(attribute->value(), attribute->value() + attribute->value_size(), Ch('\''), out);
*out = Ch('"'), ++out;
}
}
}
return out;
}
// Print data node
template<class OutIt, class Ch>
inline OutIt print_data_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
{
assert(node->type() == node_data);
if (!(flags & print_no_indenting))
out = fill_chars(out, indent, Ch('\t'));
out = copy_and_expand_chars(node->value(), node->value() + node->value_size(), Ch(0), out);
return out;
}
// Print data node
template<class OutIt, class Ch>
inline OutIt print_cdata_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
{
assert(node->type() == node_cdata);
if (!(flags & print_no_indenting))
out = fill_chars(out, indent, Ch('\t'));
*out = Ch('<'); ++out;
*out = Ch('!'); ++out;
*out = Ch('['); ++out;
*out = Ch('C'); ++out;
*out = Ch('D'); ++out;
*out = Ch('A'); ++out;
*out = Ch('T'); ++out;
*out = Ch('A'); ++out;
*out = Ch('['); ++out;
out = copy_chars(node->value(), node->value() + node->value_size(), out);
*out = Ch(']'); ++out;
*out = Ch(']'); ++out;
*out = Ch('>'); ++out;
return out;
}
// Print element node
template<class OutIt, class Ch>
inline OutIt print_element_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
{
assert(node->type() == node_element);
// Print element name and attributes, if any
if (!(flags & print_no_indenting))
out = fill_chars(out, indent, Ch('\t'));
*out = Ch('<'), ++out;
out = copy_chars(node->name(), node->name() + node->name_size(), out);
out = print_attributes(out, node, flags);
// If node is childless
if (node->value_size() == 0 && !node->first_node())
{
// Print childless node tag ending
*out = Ch('/'), ++out;
*out = Ch('>'), ++out;
}
else
{
// Print normal node tag ending
*out = Ch('>'), ++out;
// Test if node contains a single data node only (and no other nodes)
xml_node<Ch> *child = node->first_node();
if (!child)
{
// If node has no children, only print its value without indenting
out = copy_and_expand_chars(node->value(), node->value() + node->value_size(), Ch(0), out);
}
else if (child->next_sibling() == 0 && child->type() == node_data)
{
// If node has a sole data child, only print its value without indenting
out = copy_and_expand_chars(child->value(), child->value() + child->value_size(), Ch(0), out);
}
else
{
// Print all children with full indenting
if (!(flags & print_no_indenting))
*out = Ch('\n'), ++out;
out = print_children(out, node, flags, indent + 1);
if (!(flags & print_no_indenting))
out = fill_chars(out, indent, Ch('\t'));
}
// Print node end
*out = Ch('<'), ++out;
*out = Ch('/'), ++out;
out = copy_chars(node->name(), node->name() + node->name_size(), out);
*out = Ch('>'), ++out;
}
return out;
}
// Print declaration node
template<class OutIt, class Ch>
inline OutIt print_declaration_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
{
// Print declaration start
if (!(flags & print_no_indenting))
out = fill_chars(out, indent, Ch('\t'));
*out = Ch('<'), ++out;
*out = Ch('?'), ++out;
*out = Ch('x'), ++out;
*out = Ch('m'), ++out;
*out = Ch('l'), ++out;
// Print attributes
out = print_attributes(out, node, flags);
// Print declaration end
*out = Ch('?'), ++out;
*out = Ch('>'), ++out;
return out;
}
// Print comment node
template<class OutIt, class Ch>
inline OutIt print_comment_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
{
assert(node->type() == node_comment);
if (!(flags & print_no_indenting))
out = fill_chars(out, indent, Ch('\t'));
*out = Ch('<'), ++out;
*out = Ch('!'), ++out;
*out = Ch('-'), ++out;
*out = Ch('-'), ++out;
out = copy_chars(node->value(), node->value() + node->value_size(), out);
*out = Ch('-'), ++out;
*out = Ch('-'), ++out;
*out = Ch('>'), ++out;
return out;
}
// Print doctype node
template<class OutIt, class Ch>
inline OutIt print_doctype_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
{
assert(node->type() == node_doctype);
if (!(flags & print_no_indenting))
out = fill_chars(out, indent, Ch('\t'));
*out = Ch('<'), ++out;
*out = Ch('!'), ++out;
*out = Ch('D'), ++out;
*out = Ch('O'), ++out;
*out = Ch('C'), ++out;
*out = Ch('T'), ++out;
*out = Ch('Y'), ++out;
*out = Ch('P'), ++out;
*out = Ch('E'), ++out;
*out = Ch(' '), ++out;
out = copy_chars(node->value(), node->value() + node->value_size(), out);
*out = Ch('>'), ++out;
return out;
}
// Print pi node
template<class OutIt, class Ch>
inline OutIt print_pi_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
{
assert(node->type() == node_pi);
if (!(flags & print_no_indenting))
out = fill_chars(out, indent, Ch('\t'));
*out = Ch('<'), ++out;
*out = Ch('?'), ++out;
out = copy_chars(node->name(), node->name() + node->name_size(), out);
*out = Ch(' '), ++out;
out = copy_chars(node->value(), node->value() + node->value_size(), out);
*out = Ch('?'), ++out;
*out = Ch('>'), ++out;
return out;
}
}
//! \endcond
///////////////////////////////////////////////////////////////////////////
// Printing
//! Prints XML to given output iterator.
//! \param out Output iterator to print to.
//! \param node Node to be printed. Pass xml_document to print entire document.
//! \param flags Flags controlling how XML is printed.
//! \return Output iterator pointing to position immediately after last character of printed text.
template<class OutIt, class Ch>
inline OutIt print(OutIt out, const xml_node<Ch> &node, int flags = 0)
{
return internal::print_node(out, &node, flags, 0);
}
#ifndef RAPIDXML_NO_STREAMS
//! Prints XML to given output stream.
//! \param out Output stream to print to.
//! \param node Node to be printed. Pass xml_document to print entire document.
//! \param flags Flags controlling how XML is printed.
//! \return Output stream.
template<class Ch>
inline std::basic_ostream<Ch> &print(std::basic_ostream<Ch> &out, const xml_node<Ch> &node, int flags = 0)
{
print(std::ostream_iterator<Ch>(out), node, flags);
return out;
}
//! Prints formatted XML to given output stream. Uses default printing flags. Use print() function to customize printing process.
//! \param out Output stream to print to.
//! \param node Node to be printed.
//! \return Output stream.
template<class Ch>
inline std::basic_ostream<Ch> &operator <<(std::basic_ostream<Ch> &out, const xml_node<Ch> &node)
{
return print(out, node);
}
#endif
}
#endif
#ifndef RAPIDXML_UTILS_HPP_INCLUDED
#define RAPIDXML_UTILS_HPP_INCLUDED
// Copyright (C) 2006, 2009 Marcin Kalicinski
// Version 1.13
// Revision $DateTime: 2009/05/13 01:46:17 $
//! \file rapidxml_utils.hpp This file contains high-level rapidxml utilities that can be useful
//! in certain simple scenarios. They should probably not be used if maximizing performance is the main objective.
#include "rapidxml.hpp"
#include <vector>
#include <string>
#include <fstream>
#include <stdexcept>
namespace rapidxml
{
//! Represents data loaded from a file
template<class Ch = char>
class file
{
public:
//! Loads file into the memory. Data will be automatically destroyed by the destructor.
//! \param filename Filename to load.
file(const char *filename)
{
using namespace std;
// Open stream
basic_ifstream<Ch> stream(filename, ios::binary);
if (!stream)
throw runtime_error(string("cannot open file ") + filename);
stream.unsetf(ios::skipws);
// Determine stream size
stream.seekg(0, ios::end);
size_t size = stream.tellg();
stream.seekg(0);
// Load data and add terminating 0
m_data.resize(size + 1);
stream.read(&m_data.front(), static_cast<streamsize>(size));
m_data[size] = 0;
}
//! Loads file into the memory. Data will be automatically destroyed by the destructor
//! \param stream Stream to load from
file(std::basic_istream<Ch> &stream)
{
using namespace std;
// Load data and add terminating 0
stream.unsetf(ios::skipws);
m_data.assign(istreambuf_iterator<Ch>(stream), istreambuf_iterator<Ch>());
if (stream.fail() || stream.bad())
throw runtime_error("error reading stream");
m_data.push_back(0);
}
//! Gets file data.
//! \return Pointer to data of file.
Ch *data()
{
return &m_data.front();
}
//! Gets file data.
//! \return Pointer to data of file.
const Ch *data() const
{
return &m_data.front();
}
//! Gets file data size.
//! \return Size of file data, in characters.
std::size_t size() const
{
return m_data.size();
}
private:
std::vector<Ch> m_data; // File data
};
//! Counts children of node. Time complexity is O(n).
//! \return Number of children of node
template<class Ch>
inline std::size_t count_children(xml_node<Ch> *node)
{
xml_node<Ch> *child = node->first_node();
std::size_t count = 0;
while (child)
{
++count;
child = child->next_sibling();
}
return count;
}
//! Counts attributes of node. Time complexity is O(n).
//! \return Number of attributes of node
template<class Ch>
inline std::size_t count_attributes(xml_node<Ch> *node)
{
xml_attribute<Ch> *attr = node->first_attribute();
std::size_t count = 0;
while (attr)
{
++count;
attr = attr->next_attribute();
}
return count;
}
}
#endif
/*
Questo script esegue l'analisi di un video fornito per rilevare le discontinuità
che vengono trovate.
Tutte le informazioni necessarie all'agoritmo si possono individuare nei file XML
all'interno della cartella config.
@author Nadir Dalla Pozza
@version 3.0
@date 18-02-2023
*/
/**
* MPAI CAE-ARP Video Analyser.
*
* Implements MPAI CAE-ARP Video Analyser Technical Specification.
* It identifies Irregularities on the Preservation Audio-Visual File, providing:
* - Irregularity Files;
* - Irregularity Images.
*
* WARNING:
* Currently, this program is only compatible with the Studer A810 and videos recorded in PAL standard.
*
* @author Nadir Dalla Pozza
* @copyright 2022, Audio Innova S.r.l.
* @credits Niccolò Pretto, Nadir Dalla Pozza, Sergio Canazza
* @license GPL v3.0
* @version 1.0.1
* @maintainer Nadir Dalla Pozza
* @email nadir.dallapozza@unipd.it
* @status Production
*/
#include <filesystem>
#include <fstream>
#include <iostream>
......@@ -45,13 +54,12 @@ namespace fs = std::filesystem;
namespace po = boost::program_options;
/*
------------------------------------------------------------------------------
VARIABLES
------------------------------------------------------------------------------
*/
// There are two alternative approaches:
/*************************************************************************************************/
/******************************************* VARIABLES *******************************************/
/*************************************************************************************************/
// For capstan detection, there are two alternative approaches:
// Generalized Hough Transform and SURF.
bool useSURF = true;
......@@ -69,7 +77,7 @@ fs::path workingPath;
string filesName;
bool brands;
float speed, tapeThresholdPercentual, capstanThresholdPercentual;
int minDist, angleThresh, scaleThresh, posThresh, minDistTape, angleThreshTape, scaleThreshTape, posThreshTape, minDistCapstan, angleThreshCapstan, scaleThreshCapstan, posThreshCapstan;
int minDist, angleThresh, scaleThresh, posThresh, minDistCapstan, angleThreshCapstan, scaleThreshCapstan, posThreshCapstan;
// Path variables
fs::path outputPath;
fs::path irregularityImagesPath;
......@@ -96,7 +104,18 @@ string UNDERLINE = "\033[4m";
string END = "\033[0m";
/*************************************************************************************************/
/**************************************** SUPPORT METHODS ****************************************/
/*************************************************************************************************/
/**
* @brief Get operation arguments from command line or config.json file.
*
* @param argc Command line arguments count;
* @param argv Command line arguments.
* @return true if input configuration is valid;
* @return false otherwise.
*/
bool getArguments(int argc, char** argv) {
// Read configuration file
ifstream iConfig("../config/config.json");
......@@ -145,10 +164,6 @@ bool getArguments(int argc, char** argv) {
angleThresh = configurationFile["AngleThresh"];
scaleThresh = configurationFile["ScaleThresh"];
posThresh = configurationFile["PosThresh"];
minDistTape = configurationFile["MinDistTape"];
angleThreshTape = configurationFile["AngleThreshTape"];
scaleThreshTape = configurationFile["ScaleThreshTape"];
posThreshTape = configurationFile["PosThreshTape"];
minDistCapstan = configurationFile["MinDistCapstan"];
angleThreshCapstan = configurationFile["AngleThreshCapstan"];
scaleThreshCapstan = configurationFile["ScaleThreshCapstan"];
......@@ -158,7 +173,17 @@ bool getArguments(int argc, char** argv) {
}
/**
* @brief Identifies the Regions Of Interest (ROIs) on the video,
* which are:
* - The reading head;
* - The tape area under the tape head (computed on the basis of the detected reading head);
* - The capstan.
*
* @param configurationFile the config.json containing working parameters.
* @return true if some areas have been detected;
* @return false otherwise.
*/
bool findProcessingAreas(json configurationFile) {
/*********************************************************************************************/
......@@ -352,8 +377,7 @@ bool findProcessingAreas(json configurationFile) {
// Localize the object
vector<Point2f> obj;
vector<Point2f> scene;
for( size_t i = 0; i < good_matches.size(); i++ )
{
for (size_t i = 0; i < good_matches.size(); i++) {
// Get the keypoints from the good matches
obj.push_back(keypoints_object[good_matches[i].queryIdx].pt);
scene.push_back(keypoints_scene[good_matches[i].trainIdx].pt);
......@@ -375,7 +399,7 @@ bool findProcessingAreas(json configurationFile) {
// In the following there are two alterations to cut the first 20 horizontal pixels and the first 90 vertical pixels from the found rectangle:
// +10 in X for centering and -20 in width
// +45 in Y for centering and -90 in height
Vec4f positionCapstan( capstanX + 10, capstanY + 45, 1, 0 );
Vec4f positionCapstan(capstanX + 10, capstanY + 45, 1, 0);
rectCapstan = drawShapes(myFrame, positionCapstan, Scalar(255-indexPos*64, 0, 0), templateShape.cols - 20, templateShape.rows - 90, 0, 0, 1);
} else {
......@@ -483,7 +507,16 @@ bool findProcessingAreas(json configurationFile) {
}
/**
* @brief Compares two consecutive video frames and establish if there potentially is an Irregularity.
* The comparison is pixel-wise and based on threshold values set on config.json file.
*
* @param prevFrame the frame before the current one;
* @param currentFrame the current frame;
* @param msToEnd the number of milliseconds left before the end of the video. Useful for capstan analysis.
* @return true if a potential Irregularity has been found;
* @return false otherwise.
*/
bool frameDifference(cv::Mat prevFrame, cv::Mat currentFrame, int msToEnd) {
/*********************************************************************************************/
......@@ -497,6 +530,7 @@ bool frameDifference(cv::Mat prevFrame, cv::Mat currentFrame, int msToEnd) {
int capstanAreaPixels = rectCapstan.size.width * rectCapstan.size.height;
float capstanDifferentPixelsThreshold = capstanAreaPixels * capstanThresholdPercentual / 100;
// Extract matrices corresponding to the processing area
// CODE FROM https://answers.opencv.org/question/497/extract-a-rotatedrect-area/
// matrices we'll use
......@@ -518,10 +552,6 @@ bool frameDifference(cv::Mat prevFrame, cv::Mat currentFrame, int msToEnd) {
cv::getRectSubPix(rotatedPrevFrame, rect_size, rectCapstan.center, croppedPrevFrame);
cv::getRectSubPix(rotatedCurrentFrame, rect_size, rectCapstan.center, croppedCurrentFrame);
// imshow("Current frame", currentFrame);
// imshow("Cropped Current Frame", croppedCurrentFrame);
// waitKey();
// END CODE FROM https://answers.opencv.org/question/497/extract-a-rotatedrect-area/
cv::Mat differenceFrame = difference(croppedPrevFrame, croppedCurrentFrame);
......@@ -556,9 +586,7 @@ bool frameDifference(cv::Mat prevFrame, cv::Mat currentFrame, int msToEnd) {
int tapeAreaPixels = rectTape.size.width * rectTape.size.height;
float tapeDifferentPixelsThreshold = tapeAreaPixels * tapeThresholdPercentual / 100;
/***************** Extract matrices corresponding to the processing area *********************/
// Tape area
// Extract matrices corresponding to the processing area
// CODE FROM https://answers.opencv.org/question/497/extract-a-rotatedrect-area/
// matrices we'll use
......@@ -580,10 +608,6 @@ bool frameDifference(cv::Mat prevFrame, cv::Mat currentFrame, int msToEnd) {
cv::getRectSubPix(rotatedPrevFrame, rect_size, rectTape.center, croppedPrevFrame);
cv::getRectSubPix(rotatedCurrentFrame, rect_size, rectTape.center, croppedCurrentFrame);
// imshow("Current frame", currentFrame);
// imshow("Cropped Current Frame", croppedCurrentFrame);
// waitKey();
// END CODE FROM https://answers.opencv.org/question/497/extract-a-rotatedrect-area/
cv::Mat differenceFrame = difference(croppedPrevFrame, croppedCurrentFrame);
......@@ -594,7 +618,7 @@ bool frameDifference(cv::Mat prevFrame, cv::Mat currentFrame, int msToEnd) {
secEnd = secEnd % 60;
/****************************** Segment analysis ****************************************/
/************************************* Segment analysis **************************************/
int blackPixels = 0;
float mediaCurrFrame;
......@@ -612,13 +636,13 @@ bool frameDifference(cv::Mat prevFrame, cv::Mat currentFrame, int msToEnd) {
/************************************* Decision stage ****************************************/
bool irregularity = false;
bool isIrregularity = false;
if (blackPixels > tapeDifferentPixelsThreshold) { // The threshold must be passed
/***** AVERAGE_COLOR-BASED DECISION *****/
if (mediaPrevFrame > (mediaCurrFrame + 7) || mediaPrevFrame < (mediaCurrFrame - 7)) { // They are not similar for color average
irregularity = true;
isIrregularity = true;
}
/***** BRANDS MANAGEMENT *****/
......@@ -629,12 +653,11 @@ bool frameDifference(cv::Mat prevFrame, cv::Mat currentFrame, int msToEnd) {
if (firstInstant - msToEnd > 5000) {
firstBrand = false;
savingBrand = true;
irregularity = true;
isIrregularity = true;
}
// In the following iterations reset savingBrand, since we are no longer interested in brands.
} else
savingBrand = false;
}
}
......@@ -642,12 +665,17 @@ bool frameDifference(cv::Mat prevFrame, cv::Mat currentFrame, int msToEnd) {
// Update mediaPrevFrame
mediaPrevFrame = mediaCurrFrame;
return irregularity;
return isIrregularity;
}
int processing(cv::VideoCapture videoCapture) {
/**
* @brief video processing phase, where each frame is analysed.
* It saves the IrregularityImages and updates the IrregularityFiles if an Irregularity is found
*
* @param videoCapture the input Preservation Audio-Visual File;
*/
void processing(cv::VideoCapture videoCapture) {
// Video duration
int frameNumbers_v = videoCapture.get(CAP_PROP_FRAME_COUNT);
......@@ -657,7 +685,7 @@ int processing(cv::VideoCapture videoCapture) {
int savedFrames = 0, unsavedFrames = 0;
float lastSaved = -160;
// Whenever we find an Irregularity, we want to skip a lenght equal to the reading head (3 cm = 1.18 inches).
// Whenever we find an Irregularity, we want to skip a lenght equal to the Studer reading head (3 cm = 1.18 inches).
int savingRate = 79; // [ms]. Time taken to cross 3 cm at 15 ips, or 1.5 cm at 7.5 ips. The considered lengths are the widths of the tape areas.
// The following condition constitutes a valid approach if the tape areas have widths always equal to the reading head
if (speed == 7.5)
......@@ -679,6 +707,8 @@ int processing(cv::VideoCapture videoCapture) {
int msToEnd = videoLength_ms - ms;
if (ms == 0) // With OpenCV library, this happens at the last few frames of the video before realising that "frame" is empty.
break;
// Variables to display program status
int secToEnd = msToEnd / 1000;
int minToEnd = (secToEnd / 60) % 60;
secToEnd = secToEnd % 60;
......@@ -689,19 +719,20 @@ int processing(cv::VideoCapture videoCapture) {
if (secToEnd < 10)
secStrToEnd = "0" + secStrToEnd;
// Display program status
cout << "\rIrregularities: " << savedFrames << ". ";
cout << "Remaining video time [mm:ss]: " << minStrToEnd << ":" << secStrToEnd << flush;
if ((ms - lastSaved > savingRate) && frameDifference(prevFrame, frame, msToEnd)) {
// An Irregularity is found!
// An Irregularity has been found!
// De-interlacing frame
cv::Mat oddFrame(frame.rows/2, frame.cols, CV_8UC3);
cv::Mat evenFrame(frame.rows/2, frame.cols, CV_8UC3);
separateFrame(frame, oddFrame, evenFrame);
// Finding an image containing the whole tape
// Extract the image corresponding to the ROIs
Point2f pts[4];
if (savingPinchRoller)
rectCapstan.points(pts);
......@@ -709,7 +740,7 @@ int processing(cv::VideoCapture videoCapture) {
rectTape.points(pts);
cv::Mat subImage(frame, cv::Rect(100, min(pts[1].y, pts[2].y), frame.cols - 100, static_cast<int>(rectTape.size.height)));
// De-interlacing the image with the whole tape
// De-interlacing
cv::Mat oddSubImage(subImage.rows/2, subImage.cols, CV_8UC3);
int evenSubImageRows = subImage.rows/2;
if (subImage.rows % 2 != 0) // If the found rectangle is of odd height, we must increase evenSubImage height by 1, otherwise we have segmentation_fault!!!
......@@ -767,12 +798,26 @@ int processing(cv::VideoCapture videoCapture) {
myFile << "Saved frames are: " << savedFrames << endl;
myFile.close();
return 0;
}
/*************************************************************************************************/
/********************************************* MAIN **********************************************/
/*************************************************************************************************/
/**
* @brief main program, organised as:
* - Get input from command line or config.json file;
* - Check input parameters;
* - Creation of output directories;
* - Regions Of Interest (ROIs) detection;
* - Irregularities detection;
* - Saving of output IrregularityFiles.
*
* @param argc Command line arguments count;
* @param argv Command line arguments.
* @return int program status.
*/
int main(int argc, char** argv) {
/*********************************************************************************************/
......
......@@ -3,10 +3,16 @@ using namespace std;
namespace fs = std::filesystem;
/* ------------------------------------------------------------------------------
TIME FUNCTIONS
------------------------------------------------------------------------------ */
/*************************************************************************************************/
/**************************************** TIME FUNCTIONS *****************************************/
/*************************************************************************************************/
/**
* @brief Convert an int representing milliseconds to the corresponding Time Label string.
*
* @param ms the number of milliseconds.
* @return string the corresponding Time Label string.
*/
string getTimeLabel(int ms) {
int mil = ms % 1000;
......@@ -36,8 +42,14 @@ string getTimeLabel(int ms) {
}
// This function is exactly like getTimeLabel, but without punctuation in the returned string
// due to file system necessities
/**
* @brief Convert an int representing milliseconds to the corresponding Time Label string, but with dashes '-' charachers instead of periods '.' and colons ':'.
* Useful for file names.
*
* @param ms the number of milliseconds.
* @return string the corresponding Time Label string.
*/
string getSafeTimeLabel(int ms) {
int mil = ms % 1000;
......@@ -68,10 +80,18 @@ string getSafeTimeLabel(int ms) {
}
/* ------------------------------------------------------------------------------
PARSING FUNCTIONS
------------------------------------------------------------------------------ */
/*************************************************************************************************/
/*************************************** PARSING FUNCTIONS ***************************************/
/*************************************************************************************************/
/**
* @brief Separates video file name from its extension.
*
* @param[in] path Full video path;
* @param[out] fileName Video file name;
* @param[out] extension Video extension.
*/
void findFileNameFromPath(string* path, string* fileName, string* extension) {
*path = path->substr(path->find_last_of("'") + 1, path->size());
string path_without_extension = path->substr(0, path->find_last_of("."));
......@@ -79,10 +99,17 @@ void findFileNameFromPath(string* path, string* fileName, string* extension) {
*extension = path->substr(path->find_last_of(".") + 1, path->size());
}
// Obtain video file name without path
/**
* @brief Check if the specified input video file exists and is supported.
*
* @param[in] videoPath Full video path;
* @param[out] fileName Video file name;
* @param[out] extension Video extension.
* @return int -1 if the format is not supported, 0 otherwise.
*/
int findFileName(string videoPath, string &fileName, string &extension) {
// Divide file name from extension
findFileNameFromPath(&videoPath, &fileName, &extension);
if (extension.compare("avi") != 0 && extension.compare("mp4") != 0 && extension.compare("mov") != 0) {
......@@ -97,11 +124,22 @@ int findFileName(string videoPath, string &fileName, string &extension) {
}
/* ------------------------------------------------------------------------------
COMPUTER VISION FUNCTIONS
------------------------------------------------------------------------------ */
// Function to detect shape in frame
/*************************************************************************************************/
/*************************************** OpenCV FUNCTIONS ****************************************/
/*************************************************************************************************/
/**
* @brief Detects a given shape in an image, using a the OpenCV algorithm GeneralizedHoughGuil.
*
* @param[in] alg the algorithm instance;
* @param[in] templateShape the shape to detect;
* @param[in] posThresh the position votes threshold;
* @param[out] positivePositions vector representing the position assigned to each found rectangle for positive angles;
* @param[out] positiveVotes vector representing the vote assigned to each found rectangle for positive angles;
* @param[out] negativePositions vector representing the position assigned to each found rectangle for negative angles;
* @param[out] negativeVotes vector representing the vote assigned to each found rectangle for negative angles;
* @param[in] processingArea the image to be processed.
*/
void detectShape(Ptr<GeneralizedHoughGuil> alg, Mat templateShape, int posThresh, vector<Vec4f> &positivePositions, Mat &positiveVotes, vector<Vec4f> &negativePositions, Mat &negativeVotes, Mat processingArea) {
alg -> setPosThresh(posThresh);
......@@ -187,7 +225,20 @@ void detectShape(Ptr<GeneralizedHoughGuil> alg, Mat templateShape, int posThresh
}
}
// Function to draw detected shapes in a frame
/**
* @brief Draw rectangles on an image.
*
* @param frame Frame on which the rectangles will be drawn;
* @param positions The position of the rectangle;
* @param color The color of the rectangle;
* @param width The width of the rectangle;
* @param height The height of the rectangle;
* @param offsetX X offset on the position of the rectangle;
* @param offsetY Y offset on the position of the rectangle;
* @param processingScale Scaling factor, useful for downsizing.
* @return RotatedRect Object representing the drawn rectangle.
*/
RotatedRect drawShapes(Mat frame, Vec4f &positions, Scalar color, int width, int height, int offsetX, int offsetY, float processingScale) {
RotatedRect rr;
......@@ -211,29 +262,36 @@ RotatedRect drawShapes(Mat frame, Vec4f &positions, Scalar color, int width, int
return rr;
}
// Function to separate even and odd frame half planes
void separateFrame(cv::Mat frame, cv::Mat &frame_dispari, cv::Mat &frame_pari) {
int i_frame_dispari = 0;
int i_frame_pari = 0;
/**
* @brief Function to deinterlace the current image.
*
* @param[in] frame image to be processed;
* @param[out] odd_frame odd plane;
* @param[out] even_frame even plane.
*/
void separateFrame(cv::Mat frame, cv::Mat &odd_frame, cv::Mat &even_frame) {
int i_odd_frame = 0;
int i_even_frame = 0;
for (int i = 0; i < frame.rows; i++) {
for (int j = 0; j < frame.cols; j++) {
if (i % 2 == 0) {
frame_pari.at<cv::Vec3b>( i_frame_pari, j )[0] = frame.at<cv::Vec3b>(i, j)[0];
frame_pari.at<cv::Vec3b>( i_frame_pari, j )[1] = frame.at<cv::Vec3b>(i, j)[1];
frame_pari.at<cv::Vec3b>( i_frame_pari, j )[2] = frame.at<cv::Vec3b>(i, j)[2];
even_frame.at<cv::Vec3b>( i_even_frame, j )[0] = frame.at<cv::Vec3b>(i, j)[0];
even_frame.at<cv::Vec3b>( i_even_frame, j )[1] = frame.at<cv::Vec3b>(i, j)[1];
even_frame.at<cv::Vec3b>( i_even_frame, j )[2] = frame.at<cv::Vec3b>(i, j)[2];
} else {
frame_dispari.at<cv::Vec3b>( i_frame_dispari, j )[0] = frame.at<cv::Vec3b>(i, j)[0];
frame_dispari.at<cv::Vec3b>( i_frame_dispari, j )[1] = frame.at<cv::Vec3b>(i, j)[1];
frame_dispari.at<cv::Vec3b>( i_frame_dispari, j )[2] = frame.at<cv::Vec3b>(i, j)[2];
odd_frame.at<cv::Vec3b>( i_odd_frame, j )[0] = frame.at<cv::Vec3b>(i, j)[0];
odd_frame.at<cv::Vec3b>( i_odd_frame, j )[1] = frame.at<cv::Vec3b>(i, j)[1];
odd_frame.at<cv::Vec3b>( i_odd_frame, j )[2] = frame.at<cv::Vec3b>(i, j)[2];
}
}
if (i % 2 == 0) {
i_frame_pari++;
i_even_frame++;
} else {
i_frame_dispari++;
i_odd_frame++;
}
}
......@@ -241,6 +299,14 @@ void separateFrame(cv::Mat frame, cv::Mat &frame_dispari, cv::Mat &frame_pari) {
}
/**
* @brief Compute the number of different pixels between two frames.
*
* @param prevFrame the first frame;
* @param currentFrame the second frame.
* @return cv::Mat A black and white frame, where black pixels represent a difference, while white pixels represent an equality.
*/
cv::Mat difference(cv::Mat &prevFrame, cv::Mat &currentFrame) {
cv::Mat diff = currentFrame.clone();
for (int i = 0; i < currentFrame.rows; i++) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment