From b33fe0730ae129f36f8fb04234c98d5e1bd8fcd8 Mon Sep 17 00:00:00 2001 From: Chris Watts Date: Sun, 18 Dec 2016 00:00:41 +0000 Subject: [PATCH 1/5] Fix the make install process on Unix Conflicts: .gitignore --- .gitignore | 1 + CMakeLists.txt | 20 ++++++ lib/local/FaceAnalyser/CMakeLists.txt | 4 +- lib/local/LandmarkDetector/CMakeLists.txt | 17 ++++- .../LandmarkDetector/include/PathConfig.h.in | 65 +++++++++++++++++++ .../src/LandmarkDetectorParameters.cpp | 26 ++++++-- 6 files changed, 121 insertions(+), 12 deletions(-) create mode 100644 lib/local/LandmarkDetector/include/PathConfig.h.in diff --git a/.gitignore b/.gitignore index e12c985..a8771bb 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ matlab_runners/Action Unit Experiments/out_DISFA/ matlab_runners/Action Unit Experiments/out_fera/ matlab_runners/Demos/output_features_seq/ matlab_runners/Demos/output_features_vid/ +lib/local/LandmarkDetector/include/PathConfig.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 210bb75..09b953a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,8 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") +set(CMAKE_CONFIG_DIR etc/OpenFace) + find_package( OpenCV REQUIRED ) MESSAGE("OpenCV information:") MESSAGE(" OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}") @@ -33,6 +35,8 @@ foreach(file ${files}) else(MSVC) file(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/model) endif(MSVC) + + install(FILES ${file} DESTINATION ${CMAKE_CONFIG_DIR}/model) endforeach() # Move the hierarchical LandmarkDetector models @@ -44,6 +48,8 @@ foreach(file ${files}) else(MSVC) file(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/model) endif(MSVC) + + install(DIRECTORY ${file} DESTINATION ${CMAKE_CONFIG_DIR}/model) endforeach() file(GLOB files "lib/local/LandmarkDetector/model/detection_validation/*.txt") @@ -54,6 +60,8 @@ foreach(file ${files}) else(MSVC) file(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/model/detection_validation) endif(MSVC) + + install(FILES ${file} DESTINATION ${CMAKE_CONFIG_DIR}/model/detection_validation) endforeach() file(GLOB files "lib/local/LandmarkDetector/model/patch_experts/*.txt") @@ -64,6 +72,8 @@ foreach(file ${files}) else(MSVC) file(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/model/patch_experts) endif(MSVC) + + install(FILES ${file} DESTINATION ${CMAKE_CONFIG_DIR}/model/patch_experts) endforeach() file(GLOB files "lib/local/LandmarkDetector/model/pdms/*.txt") @@ -74,6 +84,8 @@ foreach(file ${files}) else(MSVC) file(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/model/pdms) endif(MSVC) + + install(FILES ${file} DESTINATION ${CMAKE_CONFIG_DIR}/model/pdms) endforeach() # Move OpenCV classifiers @@ -85,6 +97,8 @@ foreach(file ${files}) else(MSVC) file(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/classifiers) endif(MSVC) + + install(FILES ${file} DESTINATION ${CMAKE_CONFIG_DIR}/classifiers) endforeach() # Move AU prediction modules @@ -96,6 +110,8 @@ foreach(file ${files}) else(MSVC) file(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/AU_predictors) endif(MSVC) + + install(FILES ${file} DESTINATION ${CMAKE_CONFIG_DIR}/AU_predictors) endforeach() # Move AU prediction modules @@ -107,6 +123,8 @@ foreach(file ${files}) else(MSVC) file(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/AU_predictors) endif(MSVC) + + install(DIRECTORY ${file} DESTINATION ${CMAKE_CONFIG_DIR}/AU_predictors) endforeach() # Move AU prediction modules @@ -118,6 +136,8 @@ foreach(file ${files}) else(MSVC) file(COPY ${file} DESTINATION ${CMAKE_BINARY_DIR}/bin/AU_predictors) endif(MSVC) + + install(DIRECTORY ${file} DESTINATION ${CMAKE_CONFIG_DIR}/AU_predictors) endforeach() if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") diff --git a/lib/local/FaceAnalyser/CMakeLists.txt b/lib/local/FaceAnalyser/CMakeLists.txt index ce33450..1652e9a 100644 --- a/lib/local/FaceAnalyser/CMakeLists.txt +++ b/lib/local/FaceAnalyser/CMakeLists.txt @@ -29,5 +29,5 @@ include_directories(../LandmarkDetector/include) add_library( FaceAnalyser ${SOURCE} ${HEADERS}) -install (TARGETS FaceAnalyser DESTINATION bin) -install (FILES ${HEADERS} DESTINATION include) +install (TARGETS FaceAnalyser DESTINATION lib) +install (FILES ${HEADERS} DESTINATION include/OpenFace) diff --git a/lib/local/LandmarkDetector/CMakeLists.txt b/lib/local/LandmarkDetector/CMakeLists.txt index a5e1a50..c795a5c 100644 --- a/lib/local/LandmarkDetector/CMakeLists.txt +++ b/lib/local/LandmarkDetector/CMakeLists.txt @@ -3,6 +3,13 @@ include_directories(${TBB_ROOT_DIR}/include) include_directories(${BOOST_INCLUDE_DIR}) +set(CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_CONFIG_DIR}") +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/include/PathConfig.h.in + ${CMAKE_CURRENT_SOURCE_DIR}/include/PathConfig.h + NEWLINE_STYLE WIN32 +) + SET(SOURCE src/CCNF_patch_expert.cpp src/LandmarkDetectionValidator.cpp @@ -32,10 +39,14 @@ SET(HEADERS include/stdafx.h ) +SET(EXTRA_HEADERS + include/PathConfig.h +) + include_directories(./include) include_directories(${LandmarkDetector_SOURCE_DIR}/include) -add_library( LandmarkDetector ${SOURCE} ${HEADERS}) +add_library( LandmarkDetector ${SOURCE} ${HEADERS} ${EXTRA_HEADERS}) -install (TARGETS LandmarkDetector DESTINATION bin) -install (FILES ${HEADERS} DESTINATION include) +install (TARGETS LandmarkDetector DESTINATION lib) +install (FILES ${HEADERS} DESTINATION include/OpenFace) diff --git a/lib/local/LandmarkDetector/include/PathConfig.h.in b/lib/local/LandmarkDetector/include/PathConfig.h.in new file mode 100644 index 0000000..6162820 --- /dev/null +++ b/lib/local/LandmarkDetector/include/PathConfig.h.in @@ -0,0 +1,65 @@ +/////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge, +// all rights reserved. +// +// THIS SOFTWARE IS PROVIDED “AS IS” FOR ACADEMIC USE ONLY AND ANY EXPRESS +// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS +// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY. +// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +// Notwithstanding the license granted herein, Licensee acknowledges that certain components +// of the Software may be covered by so-called “open source” software licenses (“Open Source +// Components”), which means any software licenses approved as open source licenses by the +// Open Source Initiative or any substantially similar licenses, including without limitation any +// license that, as a condition of distribution of the software licensed under such license, +// requires that the distributor make the software available in source code format. Licensor shall +// provide a list of Open Source Components for a particular version of the Software upon +// Licensee’s request. Licensee will comply with the applicable terms of such licenses and to +// the extent required by the licenses covering Open Source Components, the terms of such +// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the +// licenses applicable to Open Source Components prohibit any of the restrictions in this +// License Agreement with respect to such Open Source Component, such restrictions will not +// apply to such Open Source Component. To the extent the terms of the licenses applicable to +// Open Source Components require Licensor to make an offer to provide source code or +// related information in connection with the Software, such offer is hereby made. Any request +// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk +// Licensee acknowledges receipt of notices for the Open Source Components for the initial +// delivery of the Software. + +// * Any publications arising from the use of this software, including but +// not limited to academic journal and conference publications, technical +// reports and manuals, must cite at least one of the following works: +// +// OpenFace: an open source facial behavior analysis toolkit +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency +// in IEEE Winter Conference on Applications of Computer Vision, 2016 +// +// Rendering of Eyes for Eye-Shape Registration and Gaze Estimation +// Erroll Wood, Tadas Baltrušaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling +// in IEEE International. Conference on Computer Vision (ICCV), 2015 +// +// Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection +// Tadas Baltrušaitis, Marwa Mahmoud, and Peter Robinson +// in Facial Expression Recognition and Analysis Challenge, +// IEEE International Conference on Automatic Face and Gesture Recognition, 2015 +// +// Constrained Local Neural Fields for robust facial landmark detection in the wild. +// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency. +// in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013. +// +/////////////////////////////////////////////////////////////////////////////// + +// Path parameters for configuration loading +#ifndef __PATH_CONFIG_H +#define __PATH_CONFIG_H + +#define CONFIG_DIR "@CONFIG_DIR@" + +#endif // __PATH_CONFIG_H diff --git a/lib/local/LandmarkDetector/src/LandmarkDetectorParameters.cpp b/lib/local/LandmarkDetector/src/LandmarkDetectorParameters.cpp index c0e74a3..a2e9b67 100644 --- a/lib/local/LandmarkDetector/src/LandmarkDetectorParameters.cpp +++ b/lib/local/LandmarkDetector/src/LandmarkDetectorParameters.cpp @@ -59,6 +59,7 @@ #include "stdafx.h" #include "LandmarkDetectorParameters.h" +#include "PathConfig.h" // Boost includes #include @@ -67,6 +68,7 @@ // System includes #include #include +#include using namespace std; @@ -200,15 +202,25 @@ FaceModelParameters::FaceModelParameters(vector &arguments) } // Make sure model_location is valid - if (!boost::filesystem::exists(boost::filesystem::path(model_location))) + // First check working directory, then the executable's directory, then the config path set by the build process. + boost::filesystem::path config_path = boost::filesystem::path(CONFIG_DIR); + boost::filesystem::path model_path = boost::filesystem::path(model_location); + if (boost::filesystem::exists(model_path)) { - model_location = (root / model_location).string(); - if (!boost::filesystem::exists(boost::filesystem::path(model_location))) - { - std::cout << "Could not find the landmark detection model to load" << std::endl; - } + model_location = model_path.string(); + } + else if (boost::filesystem::exists(root/model_path)) + { + model_location = (root/model_path).string(); + } + else if (boost::filesystem::exists(config_path/model_path)) + { + model_location = (config_path/model_path).string(); + } + else + { + std::cout << "Could not find the landmark detection model to load" << std::endl; } - } void FaceModelParameters::init() From c334bf0ac37c0fb8c8422ff219102eabbcf164b5 Mon Sep 17 00:00:00 2001 From: Chris Watts Date: Thu, 29 Dec 2016 23:36:10 +0000 Subject: [PATCH 2/5] Use preprocessor defines rather than configured header files for CONFIG_DIR so it works when not using CMake --- .gitignore | 1 - CMakeLists.txt | 2 + lib/local/LandmarkDetector/CMakeLists.txt | 13 +--- .../LandmarkDetector/include/PathConfig.h.in | 65 ------------------- .../src/LandmarkDetectorParameters.cpp | 5 +- 5 files changed, 7 insertions(+), 79 deletions(-) delete mode 100644 lib/local/LandmarkDetector/include/PathConfig.h.in diff --git a/.gitignore b/.gitignore index a8771bb..e12c985 100644 --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,3 @@ matlab_runners/Action Unit Experiments/out_DISFA/ matlab_runners/Action Unit Experiments/out_fera/ matlab_runners/Demos/output_features_seq/ matlab_runners/Demos/output_features_vid/ -lib/local/LandmarkDetector/include/PathConfig.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 09b953a..cb4cfc9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,8 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") set(CMAKE_CONFIG_DIR etc/OpenFace) +set(CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_CONFIG_DIR}") +add_definitions(-DCONFIG_DIR="${CONFIG_DIR}") find_package( OpenCV REQUIRED ) MESSAGE("OpenCV information:") diff --git a/lib/local/LandmarkDetector/CMakeLists.txt b/lib/local/LandmarkDetector/CMakeLists.txt index c795a5c..9d5055c 100644 --- a/lib/local/LandmarkDetector/CMakeLists.txt +++ b/lib/local/LandmarkDetector/CMakeLists.txt @@ -3,13 +3,6 @@ include_directories(${TBB_ROOT_DIR}/include) include_directories(${BOOST_INCLUDE_DIR}) -set(CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_CONFIG_DIR}") -configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/include/PathConfig.h.in - ${CMAKE_CURRENT_SOURCE_DIR}/include/PathConfig.h - NEWLINE_STYLE WIN32 -) - SET(SOURCE src/CCNF_patch_expert.cpp src/LandmarkDetectionValidator.cpp @@ -39,14 +32,10 @@ SET(HEADERS include/stdafx.h ) -SET(EXTRA_HEADERS - include/PathConfig.h -) - include_directories(./include) include_directories(${LandmarkDetector_SOURCE_DIR}/include) -add_library( LandmarkDetector ${SOURCE} ${HEADERS} ${EXTRA_HEADERS}) +add_library( LandmarkDetector ${SOURCE} ${HEADERS} ) install (TARGETS LandmarkDetector DESTINATION lib) install (FILES ${HEADERS} DESTINATION include/OpenFace) diff --git a/lib/local/LandmarkDetector/include/PathConfig.h.in b/lib/local/LandmarkDetector/include/PathConfig.h.in deleted file mode 100644 index 6162820..0000000 --- a/lib/local/LandmarkDetector/include/PathConfig.h.in +++ /dev/null @@ -1,65 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2016, Carnegie Mellon University and University of Cambridge, -// all rights reserved. -// -// THIS SOFTWARE IS PROVIDED “AS IS” FOR ACADEMIC USE ONLY AND ANY EXPRESS -// OR IMPLIED WARRANTIES WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS -// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY. -// OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -// Notwithstanding the license granted herein, Licensee acknowledges that certain components -// of the Software may be covered by so-called “open source” software licenses (“Open Source -// Components”), which means any software licenses approved as open source licenses by the -// Open Source Initiative or any substantially similar licenses, including without limitation any -// license that, as a condition of distribution of the software licensed under such license, -// requires that the distributor make the software available in source code format. Licensor shall -// provide a list of Open Source Components for a particular version of the Software upon -// Licensee’s request. Licensee will comply with the applicable terms of such licenses and to -// the extent required by the licenses covering Open Source Components, the terms of such -// licenses will apply in lieu of the terms of this Agreement. To the extent the terms of the -// licenses applicable to Open Source Components prohibit any of the restrictions in this -// License Agreement with respect to such Open Source Component, such restrictions will not -// apply to such Open Source Component. To the extent the terms of the licenses applicable to -// Open Source Components require Licensor to make an offer to provide source code or -// related information in connection with the Software, such offer is hereby made. Any request -// for source code or related information should be directed to cl-face-tracker-distribution@lists.cam.ac.uk -// Licensee acknowledges receipt of notices for the Open Source Components for the initial -// delivery of the Software. - -// * Any publications arising from the use of this software, including but -// not limited to academic journal and conference publications, technical -// reports and manuals, must cite at least one of the following works: -// -// OpenFace: an open source facial behavior analysis toolkit -// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency -// in IEEE Winter Conference on Applications of Computer Vision, 2016 -// -// Rendering of Eyes for Eye-Shape Registration and Gaze Estimation -// Erroll Wood, Tadas Baltrušaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling -// in IEEE International. Conference on Computer Vision (ICCV), 2015 -// -// Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection -// Tadas Baltrušaitis, Marwa Mahmoud, and Peter Robinson -// in Facial Expression Recognition and Analysis Challenge, -// IEEE International Conference on Automatic Face and Gesture Recognition, 2015 -// -// Constrained Local Neural Fields for robust facial landmark detection in the wild. -// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency. -// in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013. -// -/////////////////////////////////////////////////////////////////////////////// - -// Path parameters for configuration loading -#ifndef __PATH_CONFIG_H -#define __PATH_CONFIG_H - -#define CONFIG_DIR "@CONFIG_DIR@" - -#endif // __PATH_CONFIG_H diff --git a/lib/local/LandmarkDetector/src/LandmarkDetectorParameters.cpp b/lib/local/LandmarkDetector/src/LandmarkDetectorParameters.cpp index a2e9b67..90ac398 100644 --- a/lib/local/LandmarkDetector/src/LandmarkDetectorParameters.cpp +++ b/lib/local/LandmarkDetector/src/LandmarkDetectorParameters.cpp @@ -59,7 +59,6 @@ #include "stdafx.h" #include "LandmarkDetectorParameters.h" -#include "PathConfig.h" // Boost includes #include @@ -70,6 +69,10 @@ #include #include +#ifndef CONFIG_DIR +#define CONFIG_DIR "~" +#endif + using namespace std; using namespace LandmarkDetector; From d21921efdd0c1c52e49a2d02bd85e723ff9d980b Mon Sep 17 00:00:00 2001 From: Chris Watts Date: Thu, 29 Dec 2016 23:39:00 +0000 Subject: [PATCH 3/5] Include FeatureExtraction in installed bin directory --- exe/FeatureExtraction/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/exe/FeatureExtraction/CMakeLists.txt b/exe/FeatureExtraction/CMakeLists.txt index 3c56149..5d6d72d 100644 --- a/exe/FeatureExtraction/CMakeLists.txt +++ b/exe/FeatureExtraction/CMakeLists.txt @@ -14,3 +14,5 @@ target_link_libraries(FeatureExtraction FaceAnalyser) target_link_libraries(FeatureExtraction dlib) target_link_libraries(FeatureExtraction ${OpenCV_LIBS} ${Boost_LIBRARIES} ${TBB_LIBRARIES}) + +install (TARGETS FeatureExtraction DESTINATION bin) From 4260f6a20ee9fd2dcf3ca73755518a9b7be99703 Mon Sep 17 00:00:00 2001 From: Chris Watts Date: Thu, 29 Dec 2016 23:40:03 +0000 Subject: [PATCH 4/5] Fix AU and triangulation loading for FaceLandmarkImg and FeatureExtraction --- exe/FaceLandmarkImg/FaceLandmarkImg.cpp | 56 +++++++++++-------- exe/FeatureExtraction/FeatureExtraction.cpp | 61 ++++++++++++--------- 2 files changed, 68 insertions(+), 49 deletions(-) diff --git a/exe/FaceLandmarkImg/FaceLandmarkImg.cpp b/exe/FaceLandmarkImg/FaceLandmarkImg.cpp index 718d3ec..9a14330 100644 --- a/exe/FaceLandmarkImg/FaceLandmarkImg.cpp +++ b/exe/FaceLandmarkImg/FaceLandmarkImg.cpp @@ -317,6 +317,10 @@ int main (int argc, char **argv) //Convert arguments to more convenient vector form vector arguments = get_arguments(argc, argv); + // Search paths + boost::filesystem::path config_path = boost::filesystem::path(CONFIG_DIR); + boost::filesystem::path parent_path = boost::filesystem::path(arguments[0]).parent_path(); + // Some initial parameters that can be overriden from command line vector files, depth_files, output_images, output_landmark_locations, output_pose_locations; @@ -356,38 +360,44 @@ int main (int argc, char **argv) // Loading the AU prediction models string au_loc = "AU_predictors/AU_all_static.txt"; - if (!boost::filesystem::exists(boost::filesystem::path(au_loc))) + boost::filesystem::path au_loc_path = boost::filesystem::path(au_loc); + if (boost::filesystem::exists(au_loc_path)) { - boost::filesystem::path loc = boost::filesystem::path(arguments[0]).parent_path() / au_loc; - - if (boost::filesystem::exists(loc)) - { - au_loc = loc.string(); - } - else - { - cout << "Can't find AU prediction files, exiting" << endl; - return 1; - } + au_loc = au_loc_path.string(); + } + else if (boost::filesystem::exists(parent_path/au_loc_path)) + { + au_loc = (parent_path/au_loc_path).string(); + } + else if (boost::filesystem::exists(config_path/au_loc_path)) + { + au_loc = (config_path/au_loc_path).string(); + } + else + { + cout << "Can't find AU prediction files, exiting" << endl; + return 1; } // Used for image masking for AUs string tri_loc; - if (boost::filesystem::exists(boost::filesystem::path("model/tris_68_full.txt"))) + boost::filesystem::path tri_loc_path = boost::filesystem::path("model/tris_68_full.txt"); + if (boost::filesystem::exists(tri_loc_path)) { - std::ifstream triangulation_file("model/tris_68_full.txt"); - tri_loc = "model/tris_68_full.txt"; + tri_loc = tri_loc_path.string(); + } + else if (boost::filesystem::exists(parent_path/tri_loc_path)) + { + tri_loc = (parent_path/tri_loc_path).string(); + } + else if (boost::filesystem::exists(config_path/tri_loc_path)) + { + tri_loc = (config_path/tri_loc_path).string(); } else { - boost::filesystem::path loc = boost::filesystem::path(arguments[0]).parent_path() / "model/tris_68_full.txt"; - tri_loc = loc.string(); - - if (!exists(loc)) - { - cout << "Can't find triangulation files, exiting" << endl; - return 1; - } + cout << "Can't find triangulation files, exiting" << endl; + return 1; } FaceAnalysis::FaceAnalyser face_analyser(vector(), 0.7, 112, 112, au_loc, tri_loc); diff --git a/exe/FeatureExtraction/FeatureExtraction.cpp b/exe/FeatureExtraction/FeatureExtraction.cpp index 2deebb9..5bc4a07 100644 --- a/exe/FeatureExtraction/FeatureExtraction.cpp +++ b/exe/FeatureExtraction/FeatureExtraction.cpp @@ -81,6 +81,9 @@ #include #include +#ifndef CONFIG_DIR +#define CONFIG_DIR "~" +#endif #define INFO_STREAM( stream ) \ std::cout << stream << std::endl @@ -242,6 +245,10 @@ int main (int argc, char **argv) vector arguments = get_arguments(argc, argv); + // Search paths + boost::filesystem::path config_path = boost::filesystem::path(CONFIG_DIR); + boost::filesystem::path parent_path = boost::filesystem::path(arguments[0]).parent_path(); + // Some initial parameters that can be overriden from command line vector input_files, depth_directories, output_files, tracked_videos_output; @@ -322,23 +329,25 @@ int main (int argc, char **argv) output_2D_landmarks, output_3D_landmarks, output_model_params, output_pose, output_AUs, output_gaze, arguments); // Used for image masking - string tri_loc; - if(boost::filesystem::exists(path("model/tris_68_full.txt"))) + boost::filesystem::path tri_loc_path = boost::filesystem::path("model/tris_68_full.txt"); + if (boost::filesystem::exists(tri_loc_path)) { - tri_loc = "model/tris_68_full.txt"; + tri_loc = tri_loc_path.string(); + } + else if (boost::filesystem::exists(parent_path/tri_loc_path)) + { + tri_loc = (parent_path/tri_loc_path).string(); + } + else if (boost::filesystem::exists(config_path/tri_loc_path)) + { + tri_loc = (config_path/tri_loc_path).string(); } else { - path loc = path(arguments[0]).parent_path() / "model/tris_68_full.txt"; - tri_loc = loc.string(); - - if(!exists(loc)) - { - cout << "Can't find triangulation files, exiting" << endl; - return 1; - } - } + cout << "Can't find triangulation files, exiting" << endl; + return 1; + } // Will warp to scaled mean shape cv::Mat_ similarity_normalised_shape = face_model.pdm.mean_shape * sim_scale; @@ -362,24 +371,24 @@ int main (int argc, char **argv) au_loc_local = "AU_predictors/AU_all_static.txt"; } - if(boost::filesystem::exists(path(au_loc_local))) + boost::filesystem::path au_loc_path = boost::filesystem::path(au_loc_local); + if (boost::filesystem::exists(au_loc_path)) { - au_loc = au_loc_local; + au_loc = au_loc_path.string(); + } + else if (boost::filesystem::exists(parent_path/au_loc_path)) + { + au_loc = (parent_path/au_loc_path).string(); + } + else if (boost::filesystem::exists(config_path/au_loc_path)) + { + au_loc = (config_path/au_loc_path).string(); } else { - path loc = path(arguments[0]).parent_path() / au_loc_local; - - if(exists(loc)) - { - au_loc = loc.string(); - } - else - { - cout << "Can't find AU prediction files, exiting" << endl; - return 1; - } - } + cout << "Can't find AU prediction files, exiting" << endl; + return 1; + } // Creating a face analyser that will be used for AU extraction FaceAnalysis::FaceAnalyser face_analyser(vector(), 0.7, 112, 112, au_loc, tri_loc); From dbe677db38eeeedb6fd85caf1554c8c8c80373f7 Mon Sep 17 00:00:00 2001 From: Chris Watts Date: Sat, 31 Dec 2016 16:52:30 +0000 Subject: [PATCH 5/5] Forgot to add fallback define for CONFIG_DIR in FaceLandmarkImg --- exe/FaceLandmarkImg/FaceLandmarkImg.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/exe/FaceLandmarkImg/FaceLandmarkImg.cpp b/exe/FaceLandmarkImg/FaceLandmarkImg.cpp index 9a14330..bf9f716 100644 --- a/exe/FaceLandmarkImg/FaceLandmarkImg.cpp +++ b/exe/FaceLandmarkImg/FaceLandmarkImg.cpp @@ -78,6 +78,10 @@ #include #include +#ifndef CONFIG_DIR +#define CONFIG_DIR "~" +#endif + using namespace std; vector get_arguments(int argc, char **argv)